2013-04-17 1 views
-3

Я только что закончил с программированием на клиентском сервере. Программа Client-Server запущена, и сервер правильно отвечает, что получил байты.программирование сокетов в C, чтобы установить соединение неизвестно серверу

Теперь я хочу сделать это так, чтобы мне не нужно запускать программу «server». Я просто хочу, чтобы клиентская программа запускалась и вводила ip i.e. 127.0.0.1 на том же компьютере ... он должен подключаться. Он должен правильно подключиться для выполнения операций, таких как отправка байтов/штрафа на сервер и т. Д.

Возможно ли это, помощь plz. (в этом смысле SERVER PROGRAMMING НЕ НУЖНО). Я просто хочу, чтобы клиентская программа запускалась и подключалась к серверу и отправляла данные на удаленный компьютер.

+0

вы хотели бы одну программу, чтобы действовать и как клиент и сервер? – Szocske

+0

Что это значит? У подключенного сокета всегда есть две конечные точки, и для подключения там должна быть «серверная» программа, которая слушает порт. Программа сервера может работать на произвольной машине, если адрес и порт известны клиенту. –

+0

Я точно хочу, чтобы я просто ввел IP-адрес другого ПК и подключился к нему, используя клиентское программирование на C. Я только хочу сделать кодирование на стороне клиента. Предполагая, что номер порта, который я использовал для удаленного ПК, открыт. –

ответ

1

Нет, это невозможно.

У вас не может быть клиент/сервер без сервера, вы не можете «просто подключиться», если нет ничего для подключения.

Что конкретный IP-адрес и порт «открыт» означает, что на этом хосте, который слушает порт, есть какая-то служба.

+0

нормально, но если я упоминаю IP-адрес этой системы и правильный номер порта скажу, 8080 ... даже тогда это невозможно ?? –

+1

@rahulkapoor Если вы пытаетесь подключиться к системе на определенном порту, то ** должно работать ** в этой системе и слушать этот конкретный порт. И то, что прослушивается **, - это сервер. – zakinster

0

Нет, это не возможно, вы должны написать отдельно одну клиентскую программу, а также одну серверную программу, и вы можете использовать эту петлю обратно IP, но тогда и вам нужно написать две программы

+0

Нет, я хочу каждый раз вводить IP-адрес.как «$ pr1 ipaddress» и порт 8080 в моем коде. Я не хочу, чтобы сервер вмешивался в него. Я не хочу, чтобы «отправка запроса», «запрос принимался», «отправка данных», «полученные данные» .... Я просто не хочу знать сервер, т. Е. Отключить «принятый запрос» и «полученные данные» –

+0

@ unmang2203 отмечают, что клиент и сервер не должны быть в отдельных программах **, они могут быть частью одной и той же программы **. – zakinster

+0

в вашем сообщении вы сказали, что не хотите запускать серверную программу, тогда это невозможно ... в программировании на клиент/сервер вы должны запускать обе программы. если он находится на той же машине, тогда вам также нужно будет запустить их обоих .client не может выполнить эту задачу самостоятельно. – umang2203

0

соединение розетка всегда требуется один конечной точки, чтобы действовать как клиент, а другой - как сервер.

Но что вы можете сделать, это приложение, которое действует как клиент, так и как сервер, открывая как клиентский, так и серверный сокет.

0

метод POST использует заголовок HTTP, так нужно прочитать немного об этом для его программирования здесь немного примеров этого метода POST

#include<stdio.h> 

#include<stdlib.h> 

#include<usr/mynetwork.h> 

int main(int argc, char** argv) { 
int sockfd, n; 
char buff[MAXLINE],recvline[MAXLINE]; 
struct sockaddr_in servaddr; 

if(argc != 3){ 
    printf("usage: httppostconnect <ipaddress> <relative_url>"); 
    exit(0); 
} 

if((sockfd = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) == -1){ 
    printf("socket: error"); 
    exit(0); 
} 

bzero(&servaddr,sizeof(servaddr)); 
servaddr.sin_family = AF_INET; 
servaddr.sin_port = htons(80); //connect to http server 

if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr) < 0){ 
    printf("port: assigned invalid"); 
    exit(0); 
} 
if(connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr)) == -1){ 
    printf("connect: error"); 
    exit(0); 
} 

//Sending Http header 
bzero(&buff,sizeof(buff)); 

char postdata[] = "param1=value1&param2=value"; /* Change param and value here */ 

sprintf(buff,"POST %s HTTP1.1\r\nAccept: */*\r\nReferer: <REFERER HERE>\r\nAccept-Language: en-us\r\nContent-Type: application/x-www-form-urlencoded\r\nAccept-Encoding: gzip,deflate\r\nUser-Agent: Mozilla/4.0\r\nContent-Length: %d\r\nPragma: no-cache\r\nConnection: keep-alive\r\n\r\n%s",argv[2],strlen(postdata),postdata); 

if(write(sockfd,buff,strlen(buff)+1) == -1) 
    err_exit("write"); 

while ((n =read(sockfd,recvline,sizeof(recvline))) > 0){ 
    recvline[n] = 0; 
    if(fputs(recvline,stdout) == EOF) 
     err_abort("read error");    
} 
return (EXIT_SUCCESS); 

}

+0

file mynetwork не является специальным, я только что включил файлы сокетов и другие файлы заголовков в этом – umang2203

+0

. Лучше всего прочитать HTTP-rfc, чтобы увидеть, как правильно сформировать Запрос POST. Как только вы правильно поймете протокол, вы можете записать его в C-код. – umang2203

+0

ok @umang, спасибо большое –

Смежные вопросы