1 #include <stdio.h>
2 #include <string.h>
3 #include <stdlib.h>
4 #include <errno.h>
5 #include <sys/socket.h>
6 #include <sys/types.h>
7 #include <netinet/in.h>
8 #include <unistd.h>
9 #include <arpa/inet.h>
10 int main()
11 {
12 printf("a server\n");
13 int listenfd = socket(AF_INET, SOCK_STREAM, 0);//创建一个socket描述符,唯一标识一个socket,socket()返回文件描述符\
14 0,1,2分别表示标准输入、标准输出、标准错误,所以其他打开的文件描述符都会大于2, 错误时就返回 -1
15 if(listenfd == -1)
16 {
17 printf("error:socket\n");
18 return 0;
19 }
20
21 struct sockaddr_in addr;
22 addr.sin_family = AF_INET;//IPV4
23 addr.sin_port = htons(8000);//host to net,主机字节转为网络字节
24 addr.sin_addr.s_addr = INADDR_ANY;//指定ip地址:所有地址
25 if(bind(listenfd, (struct sockaddr*)&addr, sizeof(addr)) == -1)//bind()把地址和端口号组合赋给socket
26 {
27 printf("error:bind()\n");
28 return 0;
29 }
30
31 if(listen(listenfd, 5) == -1)//int listen( int sockfd/*用于标识一个已捆绑未连接套接口的描述字*/,\
32 int backlog/*等待连接队列最大长度*/);
33 {
34 printf("error:listen\n");
35 return 0;
36 }
37
38 int conn;//客户端套接字描述字
39 char clientIP[INET_ADDRSTRLEN];
40 struct sockaddr_in clientAddr;
41 socklen_t clientAddrLen = sizeof(clientAddr);
42 while(1)
43 {
44 printf("listening......\n");
45 conn = accept(listenfd, (struct sockaddr*)&clientAddr, &clientAddrLen);//监听到之后,调用accept()
46 if(conn < 0)
47 {
48 printf("error:accept\n");
49 continue;
50 }
51 inet_ntop(AF_INET/*IPV4*/, &clientAddr.sin_addr/*source*/, clientIP/*destination*/, INET_ADDRSTRLEN/*IP长度*/);
52 /*在点分十进制和二进制整数转换*/
53 printf("connect %s\n",clientIP);//IP:port
54
55 char buff[255];
56 while(1)
57 {
58 for(int i=0; i<255; ++i)buff[i]=0;
59 int len = recv(conn, buff/*存放接收数据*/, sizeof(buff), 0/*一般置零*/);
60 buff[len] = '\0';
61 if(!strcmp(buff,"exit"))
62 {
63 printf("disconnect\n");
64 return 0;
65 }
66 printf("%s\n",buff);
67 for(int i=0; i<len; ++i)
68 {
69 buff[i] = toupper(buff[i]);
70 }
71 send(conn, buff, len, 0);
72 }
73 close(conn/*socket描述字*/);//关闭连接
74 }
75 close(listenfd);
76 return 0;
77 }
1 #include <stdio.h>
2 #include <string.h>
3 #include <stdlib.h>
4 #include <errno.h>
5 #include <sys/socket.h>
6 #include <sys/types.h>
7 #include <netinet/in.h>
8 #include <unistd.h>
9 #include <arpa/inet.h>
10 int main()
11 {
12 printf("a client\n");
13 // socket
14 int client = socket(AF_INET, SOCK_STREAM, 0);
15 if (client == -1)
16 {
17 printf("error:socket\n");
18 return 0;
19 }
20 // connect
21 struct sockaddr_in serverAddr;
22 serverAddr.sin_family = AF_INET;
23 serverAddr.sin_port = htons(8000);
24 serverAddr.sin_addr.s_addr = inet_addr("192.168.246.140");//连接到master
25 if (connect(client, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) < 0)
26 {
27 printf("error:connect");
28 return 0;
29 }
30 printf("connect\n");
31 char data[255];
32 char result[255];
33 while (1)
34 {
35 scanf("%s",data);
36 if(!strcmp(data,"exit"))
37 {
38 printf("disconnect");
39 break;
40 }
41 send(client, data, strlen(data), 0);
42 for(int i=0 ;i<sizeof(result);++i)result[i]=0;
43 int len = recv(client, result, sizeof(result), 0);
44 printf("result:%s\n",result);
45 }
46 close(client);
47 return 0;
48 }