socket网络编程 |
您所在的位置:网站首页 › socket占用资源吗 › socket网络编程 |
1.TCP编程流程
1.1TCP服务器端客户端及方法介绍
TCP 提供的是面向连接的、可靠的、字节流服务。TCP 的服务器端和客户端编程流程如下: TCP服务端代码示例(方法参数意思参考套接字地址结构和网络编程接口): #include #include #include #include #include #include #include int main() { int sockfd = socket(AF_INET,SOCK_STREAM,0); assert(sockfd != -1); struct sockaddr_in saddr; memset(&saddr,0,sizeof(saddr)); saddr.sin_family = AF_INET; saddr.sin_port = htons(6000);//将短整形主机字节转换为网络字节 saddr.sin_addr.s_addr = inet_addr("127.0.0.1");//回环地址 int res = bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr)); assert(res != -1); res = listen(sockfd,5); assert(res != -1); while(1)//服务器循环接收客户端连接 { struct sockaddr_in caddr; int len = sizeof(caddr); int c = accept(sockfd,(struct sockaddr*)&caddr,&len); if(c == -1) { perror("accept error"); continue; } printf("accept c = %d\n",c); char data[128]; int n = recv(c,data,127,0);//阻塞 printf("n = %d,buff = %s\n",n,data); send(c,"OK",2,0); close(c); } close(sockfd); exit(0); }TCP客户端代码示例: #include #include #include #include #include #include #include int main() { int sockfd = socket(AF_INET,SOCK_STREAM,0); assert(sockfd != -1); struct sockaddr_in saddr; saddr.sin_port = htons(6000); saddr.sin_family = AF_INET; saddr.sin_addr.s_addr = inet_addr("127.0.0.1"); int res = connect(sockfd,(struct sockaddr*)&saddr,sizeof(saddr)); assert(res != -1); printf("please input:"); fflush(stdout); char buff[128] = {0}; fgets(buff,127,stdin); send(sockfd,buff,strlen(buff),0); char data[128] = {0}; int n = recv(sockfd,data,127,0); printf("%s\n",data); close(sockfd); exit(0); }运行结果(服务端): 客户端循环发送示例代码 : #include #include #include #include #include #include #include int main() { int sockfd = socket(AF_INET,SOCK_STREAM,0); assert(sockfd != -1); struct sockaddr_in saddr; memset(&saddr,0,sizeof(saddr)); saddr.sin_family = AF_INET; saddr.sin_port = htons(6000); saddr.sin_addr.s_addr = inet_addr("127.0.0.1"); int res = connect(sockfd,(struct sockaddr*)&saddr,sizeof(saddr)); assert(res != -1); while(1) { char buff[128] = {0}; printf("input:\n"); fgets(buff,127,stdin); if(strncmp(buff,"end",3) == 0) { break; } send(sockfd,buff,strlen(buff),0); memset(buff,0,128); recv(sockfd,buff,127,0); printf("buff = %s\n",buff); } close(sockfd); } 2.端口号占用问题当我们执行完服务端客户端代码后,再次执行客户端的时候发现执行不起来: |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |