TCP通讯程序设计---5

本文详细介绍了TCP客户端和服务器端的编程流程,包括如何创建套接字、绑定地址、监听端口、等待连接、收发数据以及关闭连接等关键步骤。通过具体的代码示例,展示了从创建socket到完成数据传输的全过程。

这里主要包含客户机和服务器的编程。

一、编程模型函数化

  使用函数说明: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.可以看到服务器收到信息并且打印出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值