使用C语言进行socket 多线程编程

原创 2011年01月16日 15:00:00
  1. #include <string.h>   
  2. #include <sys/types.h>   
  3. #include <sys/socket.h>   
  4. #include <NETINET/in.h>   
  5. #include <ERRNO.H>   
  6. #include <PTHREAD.H>   
  7.   
  8. #define MYPORT          8080   
  9. #define STRLEN          1024   
  10.   
  11.   
  12. void *Recv(void * arg1)  
  13. {  
  14.     int i,ret;  
  15.     int outp=0;  
  16.     int outfd=*(int *)arg1;  
  17.     char buf[STRLEN];  
  18.     while(1)  
  19.     {  
  20.         memset(buf,0,STRLEN);  
  21.         ret=recv(outfd,buf,STRLEN,0);  
  22.         if(ret>0){  
  23.             buf[ret]='/0';  
  24.             printf("server:recv buf=[%s]/n",buf);  
  25.         }else if(ret<0){  
  26.             printf("server:recv ret=[%d],errno=[%d]/n",ret,errno);  
  27.             break;  
  28.         }  
  29.         memset(buf,0,STRLEN);  
  30.         sprintf(buf,"HTTP/1.1 200 OK/r/nContent-Length: 2/r/nContent-Type: text/html;charset=gb2312/r/n/r/nok");  
  31.         ret=send(outfd,buf,strlen(buf),0);  
  32.         if(ret>0){  
  33.             printf("server:listend ret=[%d],buf=[%s]/n",ret,buf);  
  34.         }  
  35.         if(ret<0){  
  36.             printf("server:listend ret=[%d],errno=[%d]/n",ret,errno);  
  37.             break;  
  38.         }       
  39.        close(outfd);  
  40.     }  
  41.   
  42. }  
  43.   
  44.   
  45.   
  46.   
  47. int main()  
  48. {  
  49.     int sockefd,listend;  
  50.     int ret,i,addrlen;  
  51.     struct sockaddr_in my_addr;  
  52.     char buf[STRLEN];  
  53.     pthread_t thid;  
  54.       
  55.     sockefd=socket(AF_INET,SOCK_STREAM,0);  
  56.       
  57.     my_addr.sin_family=AF_INET;  
  58.     my_addr.sin_port=htons(MYPORT);  
  59.     my_addr.sin_addr.s_addr=inet_addr("192.168.0.102");  
  60.     bzero(&my_addr.sin_zero,8);  
  61.     
  62.     ret=bind(sockefd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr_in));  
  63.     if(ret<0){  
  64.         printf("server:bind ret=[%d],errno=[%d]/n",ret,errno);  
  65.         return -1;  
  66.     }  
  67.       
  68.     ret=listen(sockefd,5);  
  69.     if(ret<0){  
  70.         printf("server:listen ret=[%d]/n",ret);  
  71.         return -1;  
  72.     }  
  73.       
  74.     while(1){  
  75.         addrlen=sizeof(struct sockaddr_in);  
  76.         listend=accept(sockefd,(struct sockaddr *)&my_addr,&addrlen);  
  77.   
  78.         if(listend==-1){  
  79.             printf("server:accept listend=[%d],errno=[%d]/n",listend,errno);  
  80.             return listend;  
  81.         }else{  
  82.             if(pthread_create(&thid,NULL,Recv,&listend)<0){  
  83.                 printf("create the %dth thread fail/n",i);  
  84.                 return -1;  
  85.             }  

                       pthread_join(thid);

  1.         }     
  2.     }  
  3.   
  4.     printf("server:exit/n");  
  5.     return 0;  
  6. }  

多线程下SOCKET编程

C# SOCKET 端口号 编程 多线程,简单演示 新手 入门
  • kongxiangli
  • kongxiangli
  • 2014年10月23日 10:44
  • 10175

基于UDP的socket程序,多线程操作,windows下C语言

  • 2012年03月19日 10:02
  • 2KB
  • 下载

C语言socket多线程

-----------这是客户端程序--------------   #include "stdio.h" #include "winsock2.h" #include "stdlib.h" ...
  • u011146511
  • u011146511
  • 2017年02月21日 10:45
  • 1732

使用socket的Linux上的C语言helloworld多线程服务器和客户端测试程序

/////////////////////////////////////////////////////////////////////////////////// 服务器端程序的编译 gcc -...
  • dlutcat
  • dlutcat
  • 2007年10月07日 14:01
  • 13852

Linux下基于socket多线程并发通信的实现

pthread_server.c /*************************************************** * 文件名:pthread_server.c * ...
  • DLUTBruceZhang
  • DLUTBruceZhang
  • 2013年05月01日 18:04
  • 5950

多线程下SOCKET编程

C# SOCKET 端口号 编程 多线程,简单演示 新手 入门
  • kongxiangli
  • kongxiangli
  • 2014年10月23日 10:44
  • 10175

网络编程与多线程的应用--基于socket udp编写一个简单聊天程序

本例是参考孙鑫vc++教程写的一个聊天程序,用到的基本知识是SOCKET跟多线程。 1.基于socket网络编程 socket编程基本上可以分为2类,面向连接的(TCP模式)和面向无连接的(UDP...
  • Ray_nuaa
  • Ray_nuaa
  • 2014年12月30日 11:00
  • 1948

socket 网络编程快速入门(二)教你编写基于UDP/TCP的服务端多线程通信

在上一篇博文中,我们介绍了利用socket进行简单的UDP/TCP的服务端和客户端的通信。 (一) 在基于UDP的程序中,你有没有想过,如果我的这台主机在通讯的时候要求既能够收到别的主机发来的数据...
  • NK_test
  • NK_test
  • 2015年08月18日 18:41
  • 3512

C语言的Socket编程例子(TCP和UDP)

server端: #include "stdafx.h" #include #include #pragma comment(lib,"ws2_32.lib") int main(int ar...
  • chinazhd
  • chinazhd
  • 2015年04月19日 23:15
  • 56441

linux下 socket tcp Server c语言编写(分别实现单进程,多进程,多线程)

TCP 迭代服务器接受一个客户端的连接,然后处理,完成了这个客户的所有请求后,断开连接。TCP 迭代服务器一次只能处理一个客户端的请求,只有在这个客户的所有请求满足后,服务器才可以继续后面的请求。如果...
  • jelly_gemini
  • jelly_gemini
  • 2017年08月05日 22:26
  • 593
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用C语言进行socket 多线程编程
举报原因:
原因补充:

(最多只允许输入30个字)