简单的,使用套接字实现TCP通信(用线程实现并发)
来源:互联网 发布:freebsd python 编辑:程序博客网 时间:2024/06/06 18:24
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <netinet/in.h>#include <sys/socket.h>#include <pthread.h>#define N 100#define PORT 8000void *func(void *argv){int connectfd = (int)argv;char msg[N];int n;int i;while(1){n = recvfrom(connectfd,msg,N,0,NULL,NULL);if(n == 0){printf("client is closed!\n");break;}msg[n] = '\0';printf("recv:%s",msg);for(i = 0; i < n; i++){ if(msg[i] >= 'a' && msg[i] <= 'z'){msg[i] -= 32;}}printf("send:%s",msg);sendto(connectfd,msg,n,0,NULL,0);}close(connectfd);pthread_exit(NULL);}int main(){pthread_t pid[10];int listenfd;int connectfd;struct sockaddr_in servaddr;struct sockaddr_in cliaddr;socklen_t clilen;int ret;int opt = 1;int i;int count = 0;listenfd = socket(AF_INET,SOCK_STREAM,0);if(listenfd == -1){printf("socket error!\n");exit(-1);}ret = setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));if(opt == -1){printf("setsockopt error!\n");exit(-1);}bzero(&servaddr,sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port = htons(PORT);ret = bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));if(ret == -1){printf("bind error!\n");exit(-1);}ret = listen(listenfd,10);if(ret == -1){printf("listen error!\n");exit(-1);}while(1){connectfd = accept(listenfd,(struct sockaddr*)&cliaddr,&clilen);if(ret == -1){printf("accept error!\n");exit(-1);}ret = pthread_create(&pid[count],NULL,func,(void *)connectfd);if(ret == -1){printf("pthread_create error!\n");exit(-1);}count++;}/*for(i = 0; i < count; i++){ret = pthread_join(pid[i],NULL);if(ret == -1){printf("pthread_join error!\n");exit(-1);}}printf("server is closed!\n");*/close(listenfd); return 0;}
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <netinet/in.h>#include <sys/socket.h>#define N 100#define PORT 8000int main(int argc,char **argv){int sockfd;struct sockaddr_in servaddr;char sendbuf[N];char recvbuf[N];int ret;int n;if(argc != 2){printf("usage:server ip\n");exit(-1);}sockfd = socket(AF_INET,SOCK_STREAM,0);if(sockfd == -1){printf("socket error!\n");exit(-1);}bzero(&servaddr,sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = inet_addr(argv[1]);servaddr.sin_port = htons(PORT);ret = connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr));if(ret == -1){printf("connect error!\n");exit(-1);}while(fgets(sendbuf,N,stdin) != 0){sendto(sockfd,sendbuf,strlen(sendbuf),0,NULL,0);n = recvfrom(sockfd,recvbuf,N,0,NULL,NULL);recvbuf[n] = '\0';printf("recv:%s",recvbuf);}close(sockfd); return 0;}
0 0
- 简单的,使用套接字实现TCP通信(用线程实现并发)
- 简单的,使用套接字进行TCP通信(使用进程实现并发)。
- TCP套接字编程实现简单的并发服务器
- 基于TCP套接字实现简单的通信
- 使用UDP套接字实现简单的通信
- 最简单的实现TCP通信,利用Socket和ServerSocket套接字
- C# 实现基本的套接字TCP通信
- 使用套接字实现简单TCP服务器客户端模型
- 基于TCP套接字实现的简单Demo
- 【网络编程】使用流式套接字实现简单的客户端/服务端通信过程
- 使用流式套接字实现简单的客户端/服务端通信过程
- 使用TCP/IP的套接字(Socket)进行通信
- 使用TCP/IP的套接字(Socket)进行通信
- 使用TCP/IP的套接字(Socket)进行通信
- 使用TCP/IP的套接字(Socket)进行通信
- 使用TCP/IP的套接字(Socket)进行通信
- 使用TCP套接字实现文件服务器
- C++使用socket套接字的通信编程实现
- KL距离
- 制作三级菜单
- 标签检查
- 随机颜色输入框
- SWUN_2016级新生校赛_开关灯
- 简单的,使用套接字实现TCP通信(用线程实现并发)
- HDU1269 迷宫城堡,Tarjan算法入门
- html简介
- java爬虫
- 【51nod】1027 大数乘法
- 解决Node.js调用fs.renameSync报错的问题(Error: EXDEV, cross-device link not permitted)
- ajax同步和异步问题
- 静态分析工具PMD使用说明
- SSL P1407【树】哈夫曼树(一)