linux网络通信-----TCP协议
来源:互联网 发布:淘宝运费怎么设置 编辑:程序博客网 时间:2024/09/21 09:24
首先要了解TCP的通信原理
int sockfd,new_fd; struct sockaddr_inserver_addr; struct sockaddr_inclient_addr; char buffer[128]; int nbyte; int sin_size; //创建socket if((sockfd =socket(AF_INET, SOCK_STREAM, 0)) == -1) { printf("create socketerror\n"); exit(1); } //设置要绑定的地址 bzero(&server_addr,sizeof(struct sockaddr_in));//清零 server_addr.sin_family =AF_INET; server_addr.sin_port =htons(portnum); server_addr.sin_addr.s_addr = htonl(INADDR_ANY); //绑定地址 bind(sockfd, (structsockaddr *)(&server_addr), sizeof(struct sockaddr_in)); //监听端口 listen(sockfd,5);; while(1) { //等待连接 sin_size = sizeof(structsockaddr); new_fd = accept(sockfd,(struct sockaddr *)(&client_addr), &sin_size); printf("server getconnect from %s\n", inet_ntoa(client_addr.sin_addr)); //接收数据 nbyte = recv(new_fd,buffer, 128, 0); buffer[nbyte] ='\0'; printf("server received%s \n", buffer); //结束连接 close(new_fd); } close(sockfd); return 0;
intsockfd; struct sockaddr_inserver_addr; char buffer[128]; //创建套接字 if((sockfd =socket(AF_INET, SOCK_STREAM, 0)) == -1) { printf("create socketerror\n"); exit(1); } //设置要连接的服务器的地址 bzero(&server_addr,sizeof(struct sockaddr_in));//清零 server_addr.sin_family =AF_INET; server_addr.sin_port =htons(portnum); server_addr.sin_addr.s_addr = inet_addr("192.168.146.129"); //连接服务器 if ( connect(sockfd,(struct sockaddr *)(&server_addr), sizeof(struct sockaddr)) ==-1) { printf("connecterror\n"); exit(1); } //发送数据到服务器 printf("please inputchar:\n"); fgets(buffer, 128,stdin); send(sockfd, buffer,strlen(buffer), 0); //关闭连接 close(sockfd); return 0;
数据接收完成
在网络通信中,我们往往会用到不同的网络协议,有TCP,UDP,ICMP,IP,IGMP...
为了我们使用网络通信方便,Linux采用socket(套接字)来连接不同协议的接口,就相当于是在中间加入了一个交换机,自动把不同的网络连起来一样。这样我们就可以在不同的网络协议中用相同的函数了。
TCP编程模型
TCP通信需要服务器和客户端双方进行通信
首先服务器需要:创建socket,绑定地址,监听端口,等待连接,收发数据,结束连接
客户端需要:创建socket,连接服务器,收发数据,结束连接
创建socket socket
绑定地址 bind
监听端口 listen
等待连接 accept
收发数据 send/revc
结束连接 close
连接服务器 connect
具体使用方法没必要去man一个函数,查找UNIX环境高级编程即可
在一个电脑同时开两个虚拟机
把Redhat作为服务器,把ubuntu作为客户端
服务器代码
#include
#include
#include
#include
#include
#define portnum 3333
int main()
{
}
客户端代码
#include
#include
#include
#include
#include
#define portnum 3333
int main()
{
}
在Redhat运行服务器
在ubuntu运行客户端
回车后在Redhat显示
数据接收完成
这里面还有一些特殊的函数是用来把数据转化为网络字节序的,或者是把字符型IP和整数型IP之间进行转化
阅读全文
0 0
- linux网络通信-----TCP协议
- Linux网络通信 -- TCP/IP协议
- Linux网络编程(二)TCP协议通信
- Linux网络通信TCP/IP
- linux网络通信之tcp
- linux TCP网络通信过程
- 基于TCP协议的网络通信
- TCP、UDP协议,java网络通信基础
- TCP协议实现网络通信简单例子
- Android 基于TCP协议的网络通信
- linux网络通信-------UDP协议
- TCP/IP和网络通信(TCP协议编程)
- linux 网络编程:客户端与服务器通过TCP协议相互通信 + UDP
- linux 网络编程:客户端与服务器通过TCP协议相互通信
- linux 网络编程:客户端与服务器通过TCP协议相互通信
- Linux 网络编程实现TCP协议下的服务器客户端通信
- 【Linux网络编程实例】实例二:利用TCP协议进行客户端与服务器通信
- Linux网络编程之[基于socket通信的tcp协议的编程模型]
- linux进程间通信-------消息队列
- synchronized与static synchronized 的区别
- 消息队列的范例代码
- linux多线程程序
- ubuntu下,ARM_tools 的安装
- linux网络通信-----TCP协议
- three
- linux网络通信-------UDP协议
- 并发式TCP服务器的设计
- Vsprintf简介--附实现源码
- 放大电路的工作
- printf的学习
- 给linux添加PATH环境变量
- Linux init详解 (0,1,2,3,4,…