用C语言进行最基本的socket编程

2020-01-06 14:04:19于海丽
  • }  if(argc>1 && argv[1][0]=='r') 
  • {  printf("run receive ...n"); 
  • Receive();  } 
  • if(argc>1 && argv[1][0]=='s')  { 
  • printf("run send ...n");  Send(); 
  • }  } 
  •    
  • void* receiveWork(void * args)  { 
  • SOCKET sc=accept(s,0,0);  if(sc==INVALID_SOCKET) 
  • {  printf("sc Error"); 
  • }  creatThread(); 
  •   printf("----------客户端已经连接到本机的%d线程连接!n",threadCount-2); 
  • #define BUF_SIZE 4096  int receByt=0; 
  • while(1)  { 
  • char buf[BUF_SIZE];  receByt=recv(sc,buf,BUF_SIZE,0); 
  • buf[receByt]='';  if(receByt>0) 
  • {  printf("线程接收的消息是:%sn",buf); 
  • }  else 
  • {  printf("客户端已退出,"); 
  • break;  } 
  •   } 
  • int ic=closesocket(sc);  printf("服务器结束连接!n"); 
  • return NULL;  } 
  •   void creatThread() 
  • {  pthread_create(&t[threadCount++],NULL,receiveWork,NULL); 
  • }   
  •   void Receive() 
  • {  WSAData wsd; 
  • WSAStartup(MAKEWORD(2,0),&wsd);   s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); 
  • if(s==INVALID_SOCKET)  { 
  • printf("socket created Error");  } 
  • struct sockaddr_in ch;  memset(&ch,0,sizeof(ch)); 
  • ch.sin_family=AF_INET;  ch.sin_addr.s_addr=INADDR_ANY; 
  • ch.sin_port=htons(1041);  int b=bind(s,(struct sockaddr *) &ch,sizeof(ch)); 
  • if(b==SOCKET_ERROR)  { 
  • printf("bind 失败,出错代码是:%dn",WSAGetLastError());  exit(0); 
  • }  #define QUEUE_SIZE 5 
  • int l=listen(s,QUEUE_SIZE);  printf("正在监听本机的1041端口!n");