TCP连接可以分为三个情况,第一种是单进程,一个服务端只能有一个客户端;第二种是多进程,一个服务端可以接受多个客户端;第三种是多线程,相对于多进程而言更稳定,因为线程相对于进程是各自私有资源,各自独立。
tcp_client 客户端
1 #include<stdio.h>
2 #include<sys/types.h>
3 #include<sys/socket.h>
4 #include<netinet/in.h>
5 #include<arpa/inet.h>
6 #include<fcntl.h>
7 #include<string.h>
8 #include<stdlib.h>
9 #include<pthread.h>
10
11 static void usage(const char* proc)
12 {
13 printf("Usage:%s [local_ip] [local_port]\n",proc);
14 }
15
16 int main(int argc,char* argv[])
17 {
18 if(argc!=3)
19 {
20 usage(argv[0]);
21 return 1;
22 }
23
24 int sock=socket(AF_INET,SOCK_STREAM,0);
25 if(sock<0)
26 {
27 perror("socket");
28 return(2);
29 }
30
31 struct sockaddr_in peer;
32 peer.sin_family=AF_INET;
33 peer.sin_port=htons(atoi(argv[2]));
34 peer.sin_addr.s_addr=inet_addr(argv[1]);
35
36 if(connect(sock,(struct sockaddr*)&peer,sizeof(peer))<0)
37 {
38 perror("connect");
39 return 3;
40 }
41 char buf[1024];
42 while(1)
43 {
44 printf("Please Enter# ");
45 fflush(stdout);
46 ssize_t s=read(0,buf,sizeof(buf)-1);
47 if(s>0)
48 {
49 buf[s-1]=0;
50 write(sock,buf,strlen(buf));
51 ssize_t _s=read(sock,buf,sizeof(buf)-1);
52 if(_s>0)
53 {
54 buf[_s]=0;
55 printf("server echo# %s\n",buf);
56 }
57 else if(s==0)
58 {
59 printf("server quit!\n");
60 break;
61 }else{
62 break;
63 }
64 }
65 }
66 close(sock);
67 return 0;
68 }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46