Socket学习(转)
原文:socket技术详解_hellojoy的博客-CSDN博客
1.Socket连接种类
Stream:流格式套接字(Stream Sockets)也叫“面向连接的套接字”,使用TCP/IP协议,SOCK_STREAM 是一种可靠的、双向的通信数据流,数据可以准确无误地到达另一台计算机,如果损坏或丢失,可以重新发送。数据的发送和接收不同步(发送端的发送方式和接收端的接收方式无关),tcp粘包问题:什么是TCP粘包?怎么解决这个问题_渔溪大王的博客-CSDN博客_tcp粘包
Dgram:数据报格式套接字(Datagram Sockets)也叫“无连接的套接字”,使用UDP/IP协议,计算机只管传输数据,不作数据校验,如果数据在传输中损坏,或者没有到达另一台计算机,是没有办法补救的。也就是说,数据错了就错了,无法重传。因为数据报套接字所做的校验工作少,所以 在传输效率方面比流格式套接字要高,数据的发送和接收是同步的。
2.Socket常用函数
创建 socket:
int socket(int af, int type, int protocol);
af 为地址族(Address Family),也就是 IP 地址类型,常用的有 AF_INET 和 AF_INET6。
type 为数据传输方式,常用的有 SOCK_STREAM 和 SOCK_DGRAM
protocol 表示传输协议,常用的有 IPPROTO_TCP 和 IPPTOTO_UDP,分别表示 TCP 传输协议和 UDP 传输协议
例:public static Socket mainServer = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
bind和connect
bind:绑定IP地址和端口号
例:mainServer.Bind(new IPEndPoint(IPAddress.Any,10086));
connect:连接到指定的ip和端口
例:client.Connect("127.0.0.1",10086);
listen和accepts
于服务器端程序,使用 bind() 绑定套接字后,还需要使用 listen() 函数让套接字进入被动监听状态,再调用 accept() 函数,就可以随时响应客户端的请求了。
listen参数:请求队列的长度,如果请求队列已满就不再接受新的请求。
最后需要说明的是:listen() 只是让套接字进入监听状态,并没有真正接收客户端请求,listen() 后面的代码会继续执行,直到遇到 accept()。accept() 会阻塞程序执行(后面代码不能被执行),直到有新的请求到来。
mainServer.Listen(20);
mainServer.BeginAccept(StartVisit, mainServer);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2019-08-13 翻书shader