马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
端标语:
端标语: 16位数值(unsigned short ) //0~65535 (65536个数)
//标示一个进程
TCP和 UDP 的端标语是独立的
端标语:
(1)
作用:唯一的标识一个进程
每一个应用步伐进程有一个端标语,
通讯时区分数据包属于哪个应用步伐进程
http协议用到的端标语:80
在设置tcp和udp通讯的地点和端标语时,由于
1.网络协议在底层利用二进制格式来表现数据。IP地点和端标语在内存中以二进制情势存储,以便于盘算机处理惩罚和网络装备辨认。
2.差别的盘算机体系大概利用差别的字节序(大端或小端)。利用这些转换函数可以确保数据在差别体系间传输时保持划一性。
udp:特点:无毗连、不可靠
tcp:特点:面向毗连、可靠传输
利用udp举行模仿通讯的过程:
客户端:socket --- > //fgets(实现多次通讯)----> sendto ----> recvfrom ---->printf
服务器端:socket --->bind ----> recvfrom //生存了客户端的地点 srcaddr----> sprintf ---->sendto // srcaddr
2.检察地点
//linux
ifconfig //检察网卡相干信息 --- 包罗ip地点
//windows 下 cmd
ipconfig /all
tcp的c/s架构模仿:
1.创建毗连(socket --->bind ---> listen --->accept)
2.通讯过程(read --->write --->close)
tcp怎样创建毗连:
tcp三次握手:
客户端 服务器
-----我要和你创建毗连--->
<----好的,可以创建毗连--
-----好 ---------------->
断开毗连:
tcp四次挥手:
客户端 服务器
-----我要和你断开毗连--->
<----好的,可以断开------
<----我也要断开----------
-----好 ---------------->
函数原型:
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
功能:该函数固定有客户端利用,表现从当前主机向目的
主机发起链接哀求。
参数:sockfd 本地socket创建的套接子id
addr 长途目的主机的地点信息。
addrlen: 参数2的长度。
返回值:乐成 0
失败 -1
练习:
利用tcp协议,实现server收到信息后回发
server- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <sys/types.h>
- #include<stdio.h>
- #include <string.h>
- #include <unistd.h>
- int main(int argc,char *argv[])
- {
- int listen_fd = socket(AF_INET,SOCK_STREAM,0);
- struct sockaddr_in seraddr;
- seraddr.sin_family = AF_INET;
- seraddr.sin_port = htons(50000);
- seraddr.sin_addr.s_addr = inet_addr("192.168.206.128");
- if(bind(listen_fd,(const struct sockaddr*)&seraddr,sizeof(seraddr)) < 0)
- {
- perror("bind fail");
- return -1;
- }
- if(listen(listen_fd,5) < 0)
- {
- perror("listen error");
- return -1;
- }
- int connfd = accept(listen_fd,NULL,NULL);
- if(connfd < 0)
- {
- perror("accept error");
- return -1;
- }
- printf("connfd = %d\n",connfd);
- char buf[1024];
- char buf1[1024];
- while(1)
- {
- read(connfd,buf,sizeof(buf));
- sprintf(buf1,"server + %s\n",buf);
- write(connfd,buf1,strlen(buf1)+1);
- printf("%s\n",buf);
- }
- return 0;
- }
复制代码 client- #include <stdio.h>
- int main(int argc,char *argv[])
- {
- int soc_fd = socket(AF_INET,SOCK_STREAM,0);
- if(soc_fd < 0)
- {
- perror("socket fail");
- return -1;
- }
- struct sockaddr_in seraddr;
- seraddr.sin_family = AF_INET;
- seraddr.sin_port = htons(50000);
- seraddr.sin_addr.s_addr = inet_addr("192.168.206.128");
- struct sockaddr_in srcaddr;
- socklen_t addrlen = sizeof(srcaddr);
- if (connect(soc_fd,(const struct sockaddr*)&seraddr,sizeof(seraddr)) < 0)
- {
- perror("connect fail");
- }
- char buf[1024];
- char buf1[1024];
- while(1)
- {
- fgets(buf,sizeof(buf),stdin);
- write(soc_fd,buf,strlen(buf)+1);
- read(soc_fd,buf,sizeof(buf));
- printf("%s\n",buf);
- }
- return 0;
- }
复制代码 |