01 | #include <stdio.h> |
02 | #include <stdlib.h> |
03 | #include <string.h> |
04 | #include <sys/socket.h> |
05 | #include <netinet/in.h> |
06 | #include <arpa/inet.h> |
07 |
08 | //tcp客户端 |
09 | int main() |
10 | { |
11 | //1. 准备socket |
12 | int sockfd=socket(PF_INET,SOCK_STREAM,0); |
13 | if (sockfd==-1) perror ( "" ), exit (-1); |
14 | //2. 准备地址 |
15 | struct sockaddr_in addr; |
16 | addr.sin_family = PF_INET; |
17 | addr.sin_port = htons(8888); |
18 | inet_aton( "127.0.0.1" ,&addr.sin_addr); |
19 | //3.连接 |
20 | int res = connect(sockfd, |
21 | ( struct sockaddr*)&addr, sizeof (addr)); |
22 | if (res==-1) perror ( "连接失败" ), exit (-1); |
23 | printf ( "连接成功\n" ); |
24 | //4.通信 |
25 | send(sockfd, "Hello!服务器" , 12, 0); |
26 | char buf[100] = {}; |
27 | recv(sockfd, buf, sizeof (buf), 0); |
28 | printf ( "服务说:%s\n" , buf); |
29 | //5.关闭 |
30 | close(sockfd); |
31 | } |
[2].[代码] tcp_server.c
01 | #include <stdio.h> |
02 | #include <stdlib.h> |
03 | #include <string.h> |
04 | #include <sys/socket.h> |
05 | #include <netinet/in.h> |
06 | #include <arpa/inet.h> |
07 | #include <time.h> |
08 |
09 | //tcp服务器端 |
10 | int main() |
11 | { |
12 | //1. 准备socket |
13 | int sockfd=socket(PF_INET,SOCK_STREAM,0); |
14 | if (sockfd==-1) perror ( "" ), exit (-1); |
15 | //2. 准备地址 |
16 | struct sockaddr_in addr; |
17 | addr.sin_family = PF_INET; |
18 | addr.sin_port = htons(8888); |
19 | inet_aton( "192.168.182.53" ,&addr.sin_addr); |
20 | //3.绑定 |
21 | int res = bind(sockfd, |
22 | ( struct sockaddr*)&addr, sizeof (addr)); |
23 | if (res==-1) perror ( "绑定失败" ), exit (-1); |
24 | printf ( "绑定成功\n" ); |
25 | //4.监听 |
26 | res = listen(sockfd, 100); |
27 | if (res==-1) perror ( "监听失败" ), exit (-1); |
28 | printf ( "启动监听\n" ); |
29 | while (1){ |
30 | //5.等待客户端连接 |
31 | struct sockaddr_in fromaddr; |
32 | socklen_t len = sizeof (fromaddr); |
33 | int fd=accept(sockfd, |
34 | ( struct sockaddr*)&fromaddr, &len); |
35 | //6.和客户端通信 |
36 | //6.1接收客户端数据 |
37 | char buf[100] = {}; |
38 | if (recv(fd, buf, sizeof (buf),0)<=0) |
39 | perror ( "接收数据失败" ); |
40 | else { |
41 | printf ( "客户端%s说:%s\n" , |
42 | inet_ntoa(fromaddr.sin_addr),buf); |
43 | } |
44 | //6.2给客户端发数据 |
45 | memset (buf, 0, sizeof (buf)); |
46 | time_t cur; |
47 | time (&cur); |
48 | struct tm * cur_tm = localtime (&cur); |
49 | sprintf (buf, "%4d-%02d-%02d %02d:%02d:%02d" , |
50 | cur_tm->tm_year+1900, |
51 | cur_tm->tm_mon+1, |
52 | cur_tm->tm_mday, |
53 | cur_tm->tm_hour, |
54 | cur_tm->tm_min, |
55 | cur_tm->tm_sec); |
56 | send(fd, buf, strlen (buf),0); |
57 | //7.关闭socket |
58 | close(fd); |
59 | } |
60 | close(sockfd); |
61 | } |