TCP通訊程序設計


                  TCP通訊程序設計

  這里主要包含客戶機和服務器的編程。

一、編程模型函數化

  使用函數說明:socket的理解

服務器:

創建socket使用函數----->socket

綁定地址使用函數------->bind

監聽端口使用函數------->listen

等待連續使用函數------->accept

收發使用函數---------->recv/send

結束連續-------------->close

客戶機:

創建socket使用函數----->socket

連接服務器函數--------->connect

收發使用函數----------->send/recv

結束連接使用函數------->close

二、首先編寫服務器的代碼

  touch tcp_server.c

  chmod 777 tcp_server.c

代碼如下:

 1 #include <stdio.h>
 2 #include <sys/types.h>   
 3 #include <sys/socket.h>
 4 #include <string.h>
 5 #include <netinet/in.h>
 6 
 7 #define portnum 3333
 8 
 9 int main()
10 {
11     int sockfd;
12     int new_fd;
13     char buffer[128];
14     int sin_size;
15     struct sockaddr_in server_addr;
16     struct sockaddr_in client_addr;
17     int nbyte=10;   //表示打印前10個字符
18     //1.創建套接字
19     if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
20     {
21         printf("creat socket error!\n");
22         exit(1);
23     }
24     
25     //2.1設置綁定的地址
26     bzero(&server_addr,sizeof(struct sockaddr_in)); 
27     server_addr.sin_family = AF_INET;
28     server_addr.sin_port = htons(portnum);
29     server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
30     
31     //2.2綁定地址
32     bind(sockfd, (struct sockaddr *)(&server_addr),sizeof(struct sockaddr));
33 
34     //3.監聽端口
35     listen(sockfd,5);
36     
37     while(1)
38     {
39         //4.等待連接
40         sin_size = sizeof(struct sockaddr);
41         new_fd = accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size);
42         printf("server get connection %s\n",inet_ntoa(client_addr.sin_addr));
43     
44         //5.接受數據
45         recv(new_fd,buffer,128,0);
46         buffer[nbyte] = '\0';
47         printf("server receive : %s\n",buffer);
48     
49         //6.結束連接
50         close(new_fd);
51     }
52     close(sockfd);
53 }

 

編譯運行:gcc tcp_server.c -o tcp_server ---------->./tcp_server

三、編寫客戶機的代碼

touch tcp_client.c

chmod 777 tcp_client.c

代碼如下:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <sys/socket.h>
 4 #include <sys/types.h> 
 5 #include <netinet/in.h>
 6 
 7 #define portnum 3333
 8 
 9 int main()
10 {
11     int sockfd;
12     char buffer[128];
13     struct sockaddr_in server_addr;
14     //1.創建套接字
15     if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
16     {
17         printf("creat socket error!\n");
18         exit(1);
19     }
20     //2.1設置要連接色服務器的地址
21     bzero(&server_addr,sizeof(struct sockaddr_in)); 
22     server_addr.sin_family = AF_INET;
23     server_addr.sin_port = htons(portnum);
24     server_addr.sin_addr.s_addr = inet_addr("192.168.58.128");
25     
26     //2.2連接服務器
27     if (connect(sockfd,(struct sockaddr *)(&server_addr), sizeof(struct sockaddr)) == -1)
28     {
29         printf("connect error! \n");
30     }
31     
32     //3.發送數據到服務器
33     printf("please input char:\n");
34     fgets(buffer,128,stdin);
35     send(sockfd,buffer,strlen(buffer),0);
36     //4.關閉連接
37     close(sockfd);
38     return 0;
39 }

 

編譯運行gcc tcp_client.c -o tcp_client-------------->./tcp_client

四、運行結果如下

1.服務器運行進入等待

2.在客戶機等待輸入的字符中輸入字符

 

3.可以看到服務器收到信息並且打印出來

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM