1 #pragma comment(lib,"Ws2_32.lib")
2 #include <stdio.h>
3 #include <Winsock2.h>
4 SOCKET sockClient;
5 //设置接收数据和发送数据的缓存数组
6 char recvBuf[50];
7 char sendBuf[50];
8 SOCKADDR_IN addrClient;
9 DWORD WINAPI funB(LPVOID lp);
10
11 void main(){
12 //要求使用的版本
13 WORD wVersionRequested;
14 //
15 WSADATA wsaData;
16 int err;
17
18 wVersionRequested = MAKEWORD(1,1);
19 //初始化WinSock dll库 WSAStartup 函数返回0表示初始化成功
20 err = WSAStartup(wVersionRequested,&wsaData);
21 //测试版本获取结果
22 //printf("%d\n",err);
23 if(err!=0){
24 printf("WinSock初始化失败\n");
25 return;
26
27 }
28
29 if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1){
30 WSACleanup();
31 return;
32 }
33 printf("......客户端程序已启动......\n");
34 char addr[20];
35 int port;
36 printf("请输入服务器的IP地址:");
37 scanf("%s",addr);
38 printf("请输入服务器的端口号:");
39 scanf("%d",&port);
40 //创建Socket套接字
41 sockClient = socket(AF_INET,SOCK_STREAM,0);
42
43 //通讯的IP地址
44 addrClient.sin_addr.S_un.S_addr=inet_addr(addr);
45 //使用IP地址族
46 addrClient.sin_family=AF_INET;
47 //通讯的端口号
48 addrClient.sin_port=htons(port);
49
50 connect(sockClient,(SOCKADDR*)&addrClient,sizeof(SOCKADDR));
51
52 strcpy(recvBuf,"");
53 //从服务器中获得IP地址 并向服务器发送建立连接的消息
54 recv(sockClient,recvBuf,50,0);
55 send(sockClient,"已经建立通讯连接",strlen("已经建立通讯连接")+1,0);
56
57 if( strlen(recvBuf)==0){
58 printf("警告:服务器未启动,请先启动服务器!!!\n");
59 //system("pause");
60 exit(0);
61 }else{
62 printf("服务器信息:%s\n",recvBuf);
63 }
64
65 HANDLE a;
66 DWORD dwT;
67 //参数1:使用默认的安全性;参数2:与调用线程一样的栈大小;
68 //参数3:线程入口函数地址;参数4:传递给线程的参数;参数5:线程创建标记;参数6:新线程的ID
69 a=CreateThread(NULL,0,funB,0,0,&dwT);
70 //循环接收和发送消息
71 //关闭新线程的句柄
72 CloseHandle(a);
73
74 while(1){
75 //从控制台接收用户输入数据发送到客户端
76 //printf("客户端说:");
77 scanf("%s",sendBuf);
78 send(sockClient,sendBuf,strlen(sendBuf)+1,0);
79 }
80
81 //关闭套接字和连接
82 closesocket(sockClient);
83 WSACleanup();
84
85 }
86
87 DWORD WINAPI funB(LPVOID lp)
88 {
89 char Message[50];
90 while (TRUE)
91 {
92 //从服务器接收数据显示到控制台
93 if(recv(sockClient,Message,50,0) != -1){
94 printf("服务器说:%s\n",Message);
95 }else{
96 printf("连接已经中断.....请检查服务端是否启动并重试。");
97 system("pause");
98 exit(0);
99 }
100 }
101 return 0;
102 }