Linux socket program Demo1(client & server)
client and server Demo of socket.
client send data to server.
server send data to client.
// this is client
#include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <errno.h> #include <string.h> #define BUFF_SIZE 1024 int main(int argc, char* argv[]) { if(argc<=2) { printf("usage:%s ip_address port_number \r\n", basename(argv[0])); return 1; } char* ip = argv[1]; int port = atoi(argv[2]); struct sockaddr_in address; bzero(&address, sizeof(address)); address.sin_family = AF_INET; address.sin_port = htons(port); inet_pton(AF_INET,ip, &address.sin_addr); int sockfd = socket(PF_INET, SOCK_STREAM, 0); assert(sockfd>=0); struct sockaddr_in client; int connfd = connect(sockfd, (struct sockaddr*)&address, sizeof(address)); if(connfd < 0) { printf("errno is : %d...connection failed.\r\n", errno ); } else { printf("client:----send-----start\r\n"); char data1[] = "C2S:hello server.."; char data2[] = "C2S:I am client."; char data3[] = "C2S:centos6 system.Bye-Bye"; send(sockfd, data1, strlen(data1)+1, 0); sleep(1); send(sockfd, data2, strlen(data2)+1, 0); sleep(1); send(sockfd, data3, strlen(data3)+1, 0); sleep(1); printf("client:----send-----finish\r\n"); printf("client:----recv-----start\r\n"); char buffer[BUFF_SIZE]; memset(buffer, '\0', sizeof(buffer)); int ret = recv(sockfd,buffer,sizeof(buffer)-1,0); printf("get %d bytes. data:[%s]\r\n", ret, buffer); memset(buffer, '\0', sizeof(buffer)); ret = recv(sockfd,buffer,sizeof(buffer)-1,0); printf("get %d bytes. data:[%s]\r\n", ret, buffer); memset(buffer, '\0', sizeof(buffer)); ret = recv(sockfd,buffer,sizeof(buffer)-1,0); printf("get %d bytes. data:[%s]\r\n", ret, buffer); printf("client:----recv-----finish\r\n"); //========================================== buffer[BUFF_SIZE]; memset(buffer, '\0', sizeof(buffer)); ret = recv(sockfd,buffer,sizeof(buffer)-1,0); printf("get %d bytes. data:[%s]\r\n", ret, buffer); memset(buffer, '\0', sizeof(buffer)); ret = recv(sockfd,buffer,sizeof(buffer)-1,0); printf("get %d bytes. data:[%s]\r\n", ret, buffer); memset(buffer, '\0', sizeof(buffer)); ret = recv(sockfd,buffer,sizeof(buffer)-1,0); printf("get %d bytes. data:[%s]\r\n", ret, buffer); close(connfd); } printf("-----connect closed----\r\n"); close(sockfd); return 0; }
this is server:
#include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <errno.h> #include <string.h> #define BUFF_SIZE 1024 int main(int argc, char* argv[]) { if(argc<=2) { printf("usage:%s ip_address port_number \r\n", basename(argv[0])); return 1; } char* ip = argv[1]; int port = atoi(argv[2]); struct sockaddr_in address; bzero(&address, sizeof(address)); address.sin_family = AF_INET; address.sin_port = htons(port); inet_pton(AF_INET,ip, &address.sin_addr); int sockfd = socket(PF_INET, SOCK_STREAM, 0); assert(sockfd>=0); int ret = bind(sockfd,(struct sockaddr*)&address, sizeof(address)); assert(ret!=-1); ret = listen(sockfd,5); assert(ret!=-1); struct sockaddr_in client; socklen_t client_addlength = sizeof(client); int connfd = accept(sockfd, (struct sockaddr*)&client, &client_addlength); if(connfd < 0) { printf("errno is : %d\r\n", errno ); } else { printf("server:----recv-----start\r\n"); char buffer[BUFF_SIZE]; memset(buffer, '\0', sizeof(buffer)); int ret = recv(connfd,buffer,sizeof(buffer)-1,0); printf("get %d bytes. data:[%s]\r\n", ret, buffer); memset(buffer, '\0', sizeof(buffer)); ret = recv(connfd,buffer,sizeof(buffer)-1,0); printf("get %d bytes. data:[%s]\r\n", ret, buffer); memset(buffer, '\0', sizeof(buffer)); ret = recv(connfd,buffer,sizeof(buffer)-1,0); printf("get %d bytes. data:[%s]\r\n", ret, buffer); printf("server:----recv-----finish\r\n"); sleep(1); printf("server:----send-----start\r\n"); char data1[] = "S2C:hello client.."; char data2[] = "S2C:I am server."; char data3[] = "S2C:centos7 system.Bye-Bye"; send(connfd, data1, strlen(data1)+1, 0); sleep(1); send(connfd, data2, strlen(data2)+1, 0); sleep(1); send(connfd, data3, strlen(data3)+1, 0); sleep(1); printf("server:----send-----finish\r\n"); //======================================== close(STDOUT_FILENO); dup(connfd); //N messages , once recv. printf("S2C:==dup==I am server.centos7."); printf("S2C:==dup==Hello client..."); printf("S2C:==dup==bye-bye."); close(connfd); } printf("server----------connection closed--------"); close(sockfd); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?