Ниже приведены исходные тексты программ для создания простого клиентского и серверного приложений, работающих в паре друг с другом.
Клиент
#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <stdlib.h> //для функции exit() #include <string.h> //для функции memset() int main(void) { struct sockaddr_in peer; int s; int rc; char buf[1]; memset(&peer, 0, sizeof(peer)); peer.sin_family=AF_INET; peer.sin_port=htons(7500); peer.sin_addr.s_addr=inet_addr("127.0.0.1"); s=socket(AF_INET, SOCK_STREAM,0); if(s<0) { perror("Ошибка 1"); exit(1); } rc=connect(s, (struct sockaddr *)&peer, sizeof(peer)); if(rc<0) { perror("Ошибка 2"); exit(1); } rc=send(s, "1", 1, 0); if(rc<=0) { perror("Ошибка 3"); exit(1); } rc=recv(s, buf, 1, 0); if(rc<=0) perror("Ошибка 4"); else printf("%c\n", buf[0]); exit(0); }
Сервер
#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <stdlib.h> //для функции exit() int main(void) { struct sockaddr_in local; int s; int sl; int rc; char buf[1]; local.sin_family=AF_INET; local.sin_port=htons(7500); local.sin_addr.s_addr=htonl(INADDR_ANY); s=socket(AF_INET, SOCK_STREAM,0); if(s<0) { perror("Ошибка 1"); exit(1); } rc=bind(s, (struct sockaddr *)&local, sizeof(local)); if(rc<0) { perror("Ошибка 2"); exit(1); } rc=listen(s, 105); if(rc<0) { perror("Ошибка 3"); exit(1); } sl=accept(s, NULL, NULL); if(sl<0) { perror("Ошибка 4"); exit(1); } rc=recv(sl, buf, 1, 0); if(rc<=0) { perror("Ошибка 5"); exit(1); } printf("%c\n", buf[0]); rc=send(sl, "2", 1, 0); if(rc<=0) perror("Ошибка 6"); exit(0); }
Для проверки работоспособности приложений необходимо сначала в одном терминале запустить сервер, после чего во втором терминальном окне запустить клиентскую программу.