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);

原文地址:https://www.cnblogs.com/mcyushao/p/15136839.html