socket技术难点

1、使用socket建立连接后,客户端和服务端只要有一方使用close()或者dispose()关闭连接,对端在发送或接收时都会抛出异常:远程主机强迫关闭了一个现有的连接。
2、使用TcpClient建立连接后,当客户端在TcpClient实例上调用close()方法,或者在流上调用dispose()方法时:
(1)服务端调用read()方法会持续返回0,但不会抛出异常,所以会产生无限循环,需要break出循环;
(2)服务端调用write()方法会抛出异常:无法将数据写入传输连接: 您的主机中的软件中止了一个已建立的连接。。
(3)如果直接关闭掉客户端,或者客户端执行完毕没有调用stream.dispose()或者TcpClient.Close(),则在调用read()方法时会抛出异常: 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接。。
3、使用TcpClient建立连接后,当服务端在TcpClient实例上调用close()方法,或者在流上调用dispose()方法时:
(1)客户端调用write()方法会抛出异常:无法将数据写入传输连接: 您的主机中的软件中止了一个已建立的连接。。
(2)如果直接关闭掉服务端,则调用write()方法会抛出异常:无法将数据写入传输连接: 远程主机强迫关闭了一个现有的连接。。
4、创建udp广播套接字需要调用SetSocketOption,否则会抛出一场错误。udpSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);

原文地址:https://www.cnblogs.com/liuslayer/p/8394831.html