socket简单多线程方式详解编程语言
2023-06-13 09:20:30 时间
char client_message[512];
struct sockaddr_in server,client;
sock_desc=socket(AF_INET,SOCK_STREAM,0);
if(sock_desc 0){
puts("错误");
return 1;
}
server.sin_addr.s_addr=INADDR_ANY;
server.sin_port=htons(8888);
server.sin_family=AF_INET;
if(bind(sock_desc,(struct sockaddr*) server,sizeof(server)) 0){
puts("绑定错误");
}
puts("绑定完成");
new_sock=(int*)malloc(sizeof(int)); *new_sock=accept(sock_desc,(struct sockaddr*) client,(socklen_t* ) pthread_t thread_id; puts("接受请求"); if(*new_sock!=-1){ char ipv4addr[100]; char addr_buf[INET_ADDRSTRLEN]; socklen_t len; if(getsockname(*new_sock,(struct sockaddr*) client, len)==-1) { perror("gesockname err"); } printf("ip:%d/n",ntohs(client.sin_port)); if(pthread_create( thread_id,0, socketProcess,(void*)new_sock) 0){//创建一个线程 perror("创建线程失败"); return 1; } pthread_detach(thread_id);//线程分离 } puts("新客户连接"); } puts("连接成功"); return 0; void* socketProcess(void* socket_desc ){ int *csock = (int*)socket_desc;
memset(buffer, 0, buffer_len); if((bytecount = recv(*csock, buffer, buffer_len, 0))== -1){ fprintf(stderr, "接收数据错误,错误代码: %d/n", errno); close(*csock); return(0); } printf("接收到字节数 %d/n接收字符串 /"%s/"/n", bytecount, buffer); strcat(buffer, " SERVER ECHO/n"); if((bytecount = send(*csock, buffer, strlen(buffer), 0))== -1){ fprintf(stderr, "错误发送数据 %d/n", errno); close(*csock); return(0); } printf("发送字节数 %d/n", bytecount); } return 0; }
new_sock=(int*)malloc(sizeof(int)); *new_sock=accept(sock_desc,(struct sockaddr*) client,(socklen_t* ) pthread_t thread_id; puts("接受请求"); if(*new_sock!=-1){ char ipv4addr[100]; char addr_buf[INET_ADDRSTRLEN]; socklen_t len; if(getsockname(*new_sock,(struct sockaddr*) client, len)==-1) { perror("gesockname err"); } printf("ip:%d/n",ntohs(client.sin_port)); if(pthread_create( thread_id,0, socketProcess,(void*)new_sock) 0){//创建一个线程 perror("创建线程失败"); return 1; } pthread_detach(thread_id);//线程分离 } puts("新客户连接"); } puts("连接成功"); return 0; void* socketProcess(void* socket_desc ){ int *csock = (int*)socket_desc;
memset(buffer, 0, buffer_len); if((bytecount = recv(*csock, buffer, buffer_len, 0))== -1){ fprintf(stderr, "接收数据错误,错误代码: %d/n", errno); close(*csock); return(0); } printf("接收到字节数 %d/n接收字符串 /"%s/"/n", bytecount, buffer); strcat(buffer, " SERVER ECHO/n"); if((bytecount = send(*csock, buffer, strlen(buffer), 0))== -1){ fprintf(stderr, "错误发送数据 %d/n", errno); close(*csock); return(0); } printf("发送字节数 %d/n", bytecount); } return 0; }
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/11107.html
c相关文章
- Java多线程高并发学习笔记——阻塞队列详解编程语言
- Python多线程socket服务器端详解编程语言
- C#多线程的几种实现方法详解编程语言
- Python多线程编程之多线程加锁详解编程语言
- Java学习笔记之三十四超详解Java多线程基础编程语言
- java基础多线程之共享数据详解编程语言
- 多线程详解编程语言
- Java 多线程详解(四)——生产者和消费者编程语言
- Java 多线程详解(二)——如何创建进程和线程编程语言
- JAVA多线程实现的三种方式详解编程语言
- 40个Java多线程问题总结,新手必备详解编程语言
- java多线程之ReentrantLock的使用详解编程语言
- Java多线程系列–“JUC锁”02之 互斥锁ReentrantLock详解编程语言
- 多线程并发测试代码及解决方法详解编程语言
- java多线程系列(三)—等待通知机制详解编程语言
- java多线程系列(二)—对象变量并发访问详解编程语言
- Java多线程(三):synchronized关键字详解编程语言
- Java多线程(十)——线程优先级和守护线程详解编程语言
- Java多线程基础总结详解编程语言
- java的多线程安全,ReentrantLock与synchronized锁详解编程语言
- POI 多线程多sheet导出数据详解编程语言
- Java多线程知识点详解编程语言
- Java多线程20:多线程下的其他组件之CountDownLatch、Semaphore、Exchanger详解编程语言
- Java多线程2:Thread中的实例方法详解编程语言
- 借助Redis过期机制实现多线程控制(redis过期 多线程)