1.客户端代码示例:
#include#include #include #include #include #include #include #include int main(int argc, char *argv[]) { int ret, cfd; char buff[8096]={0}; struct sockaddr_in cid; bzero(&cid, sizeof(cid)); cid.sin_family = AF_INET; cid.sin_addr.s_addr = inet_addr("127.0.0.1"); cid.sin_port = htons(8000); cfd= socket(AF_INET, SOCK_STREAM, 0); if(cfd == -1) {perror("socket error!"); return -1;} ret = connect(cfd, (struct sockaddr *)&cid, sizeof(cid)); if(ret == -1) {perror("connect error!"); close(cfd); return -2;} printf("connect success ......n"); while(1){ printf("####send:"); scanf("%s", buff); send(cfd, buff, sizeof(buff), 0); recv(cfd, buff, sizeof(buff), 0); printf("client recv: %sn", buff); } close(cfd); return 0; }
2.服务端代码多进程示例:
#include#include #include #include #include #include #include int main(int argc, char *argv[]) { int ret,serverId, clientId ; pid_t pid; char buff[8096]={0}; struct sockaddr_in saddr, caddr; socklen_t clen; bzero(&saddr, sizeof(saddr)); saddr.sin_family = AF_INET; saddr.sin_addr.s_addr = htons(INADDR_ANY); saddr.sin_port = htons(8000); serverId= socket(AF_INET, SOCK_STREAM, 0); if( serverId == -1) { perror("socket error!"); return -1;} ret = bind(serverId, (struct sockaddr *)&saddr, sizeof(saddr)); if(ret == -1) {perror("bind error!"); close(serverId); return -2;} if(listen(serverId, 10) == -1) { perror("listen error!"); close(serverId); return -3;} printf("socket / bind / listen success......n"); while(1) { clen = sizeof(caddr); clientId = accept(serverId, (struct sockaddr *)&caddr, (socklen_t *)&clen); if(clientId == -1) { perror("accept error !"); close(serverId); return -4;} pid = fork(); if(pid == 0){ close(serverId); printf("------------recv--------------n"); while(recv(clientId, buff, sizeof(buff), 0)>0){ printf("server recv: %sn", buff); strcat(buff, "#ok"); send(clientId, buff, sizeof(buff), 0); } exit(0); } else if(pid < 0){ perror("fork error !"); close(serverId); close(clientId); return -5; } close(clientId); } }
3.运行结果如下图:



