ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

网络套接字 你必须给我把博客写好,这是重点的重点,后续也得写上,不能断

2021-06-02 22:53:43  阅读:146  来源: 互联网

标签:socket int 博客 地址 sockfd 接字 重点 客户端


我:接么重要的网络知识你不会
你:有点忘记了
我:忘记还在那,还不点着记记。。想回家种地啊;
你:谢谢哥哥;
我:。。

好好看,好好学

好好看,好好学

@TOC

udp协议/tcp协议

udp协议:

用户数据报协议
特新:无连接、不可靠、面向数据报;
应用场景:实时性要求大于安全性要求的场景;---视频传输

tcp协议:

传输控制协议
特性:面向链接、可靠传输,面向字节流;
应用场景:安全性要求大于实时性要求的场景;---文件传输

在网络通信程序中,通信两端分为:客户端、服务器端

  • 客户端: - 通常是提供给客户的通信端,通常是编写通信程序中主动发起请求的一端;
  • 服务端:接受请求,向客户提供服务的通信端;

客户端是主动发送请求的一端,也就意味着客户端必须提前能知道服务端的地址信息(ip+port)是多少;
服务器地址通常固定的,并且是提前提供给客户端;

udp通信程序的编写:

网络通信程序的编写都使用的是套接字接口——socket接口

客户端的主要工作为:
(1)创建套接字,使进程与网卡之间建立联系
(2)为套接字绑定地址信息,每条数据中都有源端地址和对端地址,绑定的地址信息就是源端地址信息(客户端不建议主动绑定)
(3)发送数据(如果没有绑定地址则会选择合适的进行绑定)
(4)接收数据
(5)关闭套接字释放资源
服务端的主要工作为
(1)创建套接字,在内核中创建socket结构体
(2)为套接字绑定地址信息,给内核创建的socket结构体中添加IP,PORT信息(告诉操作系统哪些数据应该放到这个socket的缓冲区交给哪个进程处理)
(3)接受数据,从对应socket结构体的接收缓冲区中取出数据
(4)回复数据,通过接收数据时获取的发送端地址信息进行数据回复
(5)关闭套接字释放资源

客户端

1.创建套接字:

int socket(int domain,int type,int protocol);
domain:地址域类型--AF_INET-IPv4通信,使用IPv4的地址结构;
type:套接字类型;SOCK_STREAM/SOCK_DGRAM;
protocol:本次通信协议IPPROTO_TCP-6/IPPROTO_UDP-17;
0是udp默认是数据报协议SOCK_DGRAM的协议;
返回值:返回一个文件描述符-操作句柄;

udp必须使用SOCK_DGRAM,tcp必须用SOCK_STREAM;

2.为套接字绑定地址信息;

int bind(int sockfd,struct sockaddr* addr,socklen_t addrlen);
sockfd:创建套接字返回的操作句柄;
addr:当前绑定的地址信息
address_len:表示实际地址结构长度
返回值:成功返回0,失败返回-1;

3.发送数据:

ssize_t sendto(int sockfd, void *buf, size_t len, int flags, struct sockaddr* addr, socklen_t addrlen);
sockfd: 表示套接字操作句柄,
buf 表示要发送的数据的空间首地址,
len 表示数据长度,flags默认是0,表示阻塞发送,
addr 表示接收端口地址信息,
addrlen 表示地址信息长度
返回值:成功返回实际发送的数据字节长度,失败返回-1

4.接受数据:

ssize_t recvfrom(int sockfd, void *buf, int len, int flags, struct sockaddr* src_addr, socklen_t* addrlen);
sockfd 表示套接字操作句柄;
buf 表示放置数据的缓冲区空间首地址;
len 表示要接收的数据长度(不能大于缓冲区长度);
flags 默认是0,表示阻塞接收;
addr 表示发送端口地址信息的接收缓冲区;
addrlen 表示地址信息长度
返回值:成功返回实际接收的数据长度,失败返回-1

5.关闭套接字:

int close(int fd);

字节序转化接口:

  1 // udp  服务端的
  2 #include<stdio.h>
  3 #include<unistd.h>
  4 #include<string.h>
  5 #include<arpa/inet.h>//字节序转换接口头文件
  6 #include<netinet/in.h>//地址结构头文件,协议类型头文件
  7 #include<sys/socket.h>//套接字头文件
  8 
  9 //服务端serve
 10 int main(){
 11 //1.创建套接字
 12 //int socket(地址域类型,套接字类型,协议类型);
 13 //int sockfd=socket(int domain, int type, int protocol);
 14  int sockfd=socket(AF_INET,SOCK_DGRAM, IPPROTO_UDP);
 15  if(sockfd<0){
 16     perror("socket error\n");
 17     return -1;
 18  }
 19 //2.为套接字绑定地址信息  绑定xshell绑定的地址
 20 //int bind(套接字描述符,地址信息,地址长度)
 21 //int bind(int sockfd,struct sockaddr* addr,socklen_t addrlen);
 22 struct sockaddr_in addr;//定义IPV4地址结构
 23 addr.sin_family=AF_INET;
 24 addr.sin_port=htons(9000);//设置地址端口
 25 addr.sin_addr.s_addr=inet_addr("192.168.106.133");
 26 int len=sizeof(addr);   
 27 int ret=bind(sockfd,(struct sockaddr*)&addr,len);
 28 if(len<0){
 29     perror("bind error\n"); 
 30     return -1;
 31 } 
 32           
 33 //需要一直接受数据、发送数据
 34 while(1){
 35 //3.接受数据
 36 //recvfrom(句柄,空间,长度,标志,对端地址,地址长度);
 37 //ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
 38 //                        struct sockaddr *src_addr, socklen_t *addrlen);
 39 char buf[1024]={0};  
 40 struct sockaddr_in paddr; 
 41 int len=sizeof(struct sockaddr_in);
 42 ret=recvfrom(sockfd,buf,1023,0,(struct sockaddr*)&paddr,&len);
 if(ret<0){
 44     perror("recvfrom error\n");
 45     return -1;
 46 }
 47 printf("client said:%s\n",buf);
 48 
 49 char *data="终于看完了~~";
 50 //4.发送/回复数据
 51 ret=sendto(sockfd,data,strlen(data),0,(struct sockaddr*)&paddr,len);
 52 if(ret<0){
 53     perror("sendto error\n");
 54     return -1;
 55 }
 56 }
 57 //5.关闭套接字
 58 close(sockfd);
 59 return 0;
 60 }

在这里插入图片描述

标签:socket,int,博客,地址,sockfd,接字,重点,客户端
来源: https://blog.51cto.com/u_14982125/2848278

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有