1.求解SocketAddress和InetAddress的区别以及各自在什么情况下用,
前者是表示不带任何协议附件的 Socket Address。作为一个抽象类,应通过特定的、协议相关的实现为其创建子类。
它提供不可变对象,供套接字用于绑定、连接或用作返回值。
后者是表示互联网协议(IP)地址;IP 地址是 IP 使用的 32 位或 128 位无符号数字,它是一种低级协议,UDP 和 TCP 协议都是在它的基础上构建的。IP 地址的体系结构是由 RFC 790:Assigned Numbers、RFC 1918:Address Allocation for Private Internets、RFC 2365:Administratively Scoped IP Multicast 和 RFC 2373:IP Version 6 Addressing Architecture 定义的。InetAddress 的实例包含 IP 地址,还可能包含相应的主机名(取决于它是否用主机名构造或者是否已执行反向主机名解析)
2.Socket.Listen的参数是做什么用的
Socket.Listen方法用于将 Socket 置于侦听状态
backlog(楼主说的参数)
挂起连接队列的最大长度。
backlog 参数指定队列中最多可容纳的等待接受的传入连接数。若要确定可指定的最大连接数,要参照 MaxConnections 值
程序代码:
// create the socket
Socket listenSocket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
// bind the listening socket to the port
IPAddress hostIP = (Dns.Resolve(IPAddress.Any.ToString())).AddressList[0];
IPEndPoint ep = new IPEndPoint(hostIP, port);
listenSocket.Bind(ep);
// start listening
listenSocket.Listen(backlog);
考虑默认值为5明显应该是MaxConnections 。
后面的测试验证,就是这个参数非常的致命,在修改为200之后,tps直接*2。
返回来分析这个参数,默认最多容许有5个空闲长连接。考虑到100个工作线程,正常应该长连接数目也在100附近,考虑每次请求都要先申请一个连接,用完
之后再放回,100个工作线程同时操作,很有可能同时将超过5个的连接返还给连接池。如果服务器简单的判断说多于5个连接然后就立即close并释放长连
接,那么就会出现一方面连续释放长连接,一方面因为连接数不够不停的创建新的长连接。
换言之,当100个线程并发在连接池中进行申请连接/返还连接的过程中,连接池内的可用连接数是时刻变化的,实际的数目会有大的波动。而默认的最大空闲参数过小(默认才5)使得这个波动有极大的几率突破限制,从而造成连接池进行不必要的释放所谓过多的“空闲”连接。
3.求MSDN中关于socket编程中的函数的参数介绍
哥们,百度百科,里面都有。
bind函数
bind函数用于将套接字绑定到一个已知的地址上。
语法: int bind ( SOCKET s,const struct sockaddr FAR* name, int namelen);
参数说明: s:是一个套接字。
name:是一个sockaddr结构指针,该结构中包含了要结合的地址和端口号。
namelen:确定name缓冲区的长度。
返回值:如果函数执行成功,返回值为0,否则为SOCKET_ERROR。
在定义一个套接字后,需要调用bind函数为其指定本机地址、协议和端口号。
下面的代码创建一个套接字s,将其绑定到3010端口上。
int port = 3010;
SOCKET s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
sockaddr_in addr;
addr.sin_family = AF_INET; //内部网络协议TCP\UDP等
addr.sin_port = htons(port); //端口号
addr.sin_addr.s_addr = htonl(INADDR_ANY);
if (SOCKET_ERROR = bind(s,(LPSOCKADDR)&addr,sizeof(addr))==0)
{ MessageBox("失败!"); }
listen在套接字函数中表示让一个套接字处于监听到来的连接请求的状态
功能:把一个本地地址与套接字关联。
参数:
s 一个已绑定未被连接的套接字描述符
backlog 连接请求队列(queue of pending connections) 的最大长度(一般由2到4)。用SOMAXCONN则由 系统确定。
返回值:
无错误,返回0,
否则,返回SOCKET ERROR,可以调用函数WSAGetLastError取得错误代码。
转载请注明出处育才学习网 » socketaddress参数怎么写(求解SocketAddress和InetAddress的区别以及各自在什么情况下用,)