博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络编程3
阅读量:3592 次
发布时间:2019-05-20

本文共 1374 字,大约阅读时间需要 4 分钟。

TCP客户端的实现

1、用socket创建套接字文件,指定使用TCP协议

2、调用connect主动向服务器发起三次握手,进行连接
int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
功能:向服务器主动发起连接
返回值:成果返回0,失败返回-1

3、调用read(recv)和write(send)收发数据

ssize_t recv(int sockfd, const void *buf, size_t len, int flags);
用于通信描述符 应用缓存 长度 0
功能:向对方发送消息
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
功能:接收对象发送消息

4、调用close或者shutdown关闭连接

int shutdown(int sockfd, int how)

功能:可能按照要求关闭连接,而且不管有多少个描述符指向同一连接,只要调用shutdown去操作了其中某个描述符,连接就会立即断开

返回值:成功返回0,失败返回-1
how:
SHUT_RD:只断开读连接
SHUT_WR:只断开写;连接
SHUT_RDWR:读写连接都断开

无法绑定解决:

int opt = 1;
setsockopt(lisyenfd , SQL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt))

UDP协议的C/S实现:

UDP协议没有建立连接特性,所以UDP协议没有自动记录对方IP 和端口号的特点,每次发送数据是,必须亲自指定的对方的IP 和端口号,只有这样才能把数据发送给对方
UDP:通信过程:
1、调用socket创建套接字
2、bind绑定固定的IP 和端口号
3、调用sendto和recvfrom函数,发送和接收数据
ssize_t send(int sockfd, const void *buf, size_t len, int flags,
存放数据缓存 缓存大小 0
const struct sockaddr *dest_addr, socklen_t addrlen);
填写目标的IP和端口 dest_addr的大小

功能:发送数据当后面两个参数位NULL和0时,功能相当于send,send专门用于面向连接的通信。但对于向UDP 这样的无连接协议必须要用sendto,因此必须使用后两个参数

返回值:成功返回发送的字节数,失败返回-1

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,

描述符 应用缓存 缓存大小 0
struct sockaddr *src_addr, socklen_t *addrlen);

功能:接收数据后面两个参数位NULL和NULL时,功能相当于recv,send专门用于面向连接的通信。但对于向UDP 这样的无连接协议必须要用recvfrom,因此必须使用后两个参数

返回值:成功返回接收到的字节数,失败返回-1

广播:

1、一个人发,然后其他所有人都接收
2、广播只能在局域网内部有效,广播数据是无法越过路由器的

转载地址:http://gcjwn.baihongyu.com/

你可能感兴趣的文章
Django2.1-mysql学习(二)
查看>>
解决 Django 问题:No migrations to apply. 无法生成表
查看>>
Django2.1-mysql学习(三)
查看>>
Django2.1-mysql学习(四)
查看>>
Django2.1-mysql学习(五)
查看>>
Django2.1-mysql学习(六)
查看>>
Django2.1-mysql学习(后续)
查看>>
Django连接mysql-workbench异常
查看>>
CSS中的各种选择器及优先级
查看>>
JS中Math对象的常用简单方法
查看>>
如何自己传入style后的属性
查看>>
基于pytorch的人工智能分类垃圾桶
查看>>
git学习笔记V1
查看>>
markdown学习笔记V1
查看>>
深度学习入门笔记v1.0.0
查看>>
YOLO综述
查看>>
Training端深度学习框架(tensorflow和pytorch)
查看>>
主流部署端深度学习框架
查看>>
主流边缘端部署嵌入式平台
查看>>
python turtle 手撸RRT算法
查看>>