main.cpp
上传用户:carlos
上传日期:2013-08-30
资源大小:24k
文件大小:2k
源码类别:

进程与线程

开发平台:

Visual C++

  1. #include <winsock2.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #pragma comment(lib,"wsock32.lib")
  5. #define MAX_LEN 1024
  6. void InitListenSocket(SOCKET& Listen_Socket)
  7. {
  8. int ret;
  9. WSADATA wsadata;
  10. int Port = 5150;
  11. SOCKADDR_IN Server_Addr;
  12. if ((ret = WSAStartup(MAKEWORD(2,2), &wsadata)) != 0)
  13. {
  14. printf("WSAStartup failed with error %dn", ret);
  15. return;
  16. }
  17. if ((Listen_Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
  18. {
  19. printf("socket failed with error %dn", WSAGetLastError());
  20. WSACleanup();
  21. return;
  22. }
  23. Server_Addr.sin_family = AF_INET;
  24. Server_Addr.sin_port = htons(Port);    
  25. Server_Addr.sin_addr.s_addr = htonl(INADDR_ANY);
  26. if (bind(Listen_Socket, (SOCKADDR *)&Server_Addr, sizeof(Server_Addr))== SOCKET_ERROR)
  27. {
  28. printf("bind failed with error %dn", WSAGetLastError());
  29. closesocket(Listen_Socket);
  30. WSACleanup();
  31. return;
  32. }
  33. if (listen(Listen_Socket, 5) == SOCKET_ERROR)
  34. {
  35. printf("listen failed with error %dn", WSAGetLastError());
  36. closesocket(Listen_Socket);
  37. WSACleanup();
  38. return;
  39. printf("We are awaiting a connection on port %d.n", Port);
  40. }
  41. //数据报格式
  42. struct Mes_pack
  43. {
  44. char* ip_addr;
  45. char* data_buf;
  46. int   data_len;
  47. };
  48. struct Sock_data
  49. {
  50. SOCKET sock;
  51. SOCKADDR_IN addr;
  52. };
  53. //线程接收函数
  54. DWORD WINAPI Thread_Recv(LPVOID);  
  55. void main(void)
  56. {
  57. SOCKET        Connect_Socket,Listen_Socket;
  58. SOCKADDR_IN   Client_Addr;
  59. int           Client_Addr_Len;
  60. int           conn_num = 0;
  61. HANDLE        hThread;
  62. DWORD         dwThreadId; 
  63. Sock_data* param= new Sock_data;
  64. InitListenSocket(Listen_Socket);
  65. Client_Addr_Len = sizeof(SOCKADDR);
  66.    
  67. int i=0;
  68. //CreateThread(NULL,0,Thread_Recv,(LPVOID)param,0,&dwThreadId);
  69. while (true)
  70. {
  71. if((param->sock = accept(Listen_Socket, (SOCKADDR *) &param->addr,&Client_Addr_Len)) != INVALID_SOCKET)
  72. {
  73. printf("connection num =  %d,socket =  %dn",++conn_num,param->sock);
  74. hThread = CreateThread(NULL,0,Thread_Recv,(LPVOID)param,0,&dwThreadId);
  75. }
  76. }
  77. closesocket(Connect_Socket);
  78. WSACleanup();
  79. }
  80. DWORD WINAPI Thread_Recv(LPVOID param)   
  81. {
  82. Sock_data* data = new Sock_data;
  83. data->sock = ((Sock_data*)param)->sock;
  84. char   buf[256];   
  85. int   Ret;   
  86. while(true)
  87. {
  88. if((Ret=recv(data->sock,buf,256,0))>0)   
  89. {
  90. printf("recv_sock:   %d,   ",data->sock);
  91. printf("receive num= %dn",Ret);
  92. }
  93. }
  94. }