服务器端配置步骤:
1、创建一个socket : listener= new socket()
2、绑定本机的IP地址、端口等信息: listener.bind()
3、开启监听: listener.listen()
4、接收客户端上来的连接:socket=listener accept()。
5、收发数据: send()、recv(),ead()、write()。
6、关闭网络连接: socket.close()
7、关闭监听: listener.close()
客户端配置步骤:
1、创建一个socket socket=new socket()
2、连接服务器(IP地址和端口): socket.connect()。
5、收发数据,用函数send()和recv(),或者read()和write()。
6、关闭网络连接。
补充
1、运行时提示:由于目标计算机积极拒绝,无法连接。 127.0.0.1:2014
用 System.Net.Dns.GetHostAddresses("localhost")[1].ToString(); 取得的也是127.0.0.1
参考:https://blog.csdn.net/u010784236/article/details/51820284 也与我的情况不一样。
想想我是在局域网中,用ipconfig /all 找到自己的ip 192.168.3.5 替换 127.0.0.1 添加防火墙规则,仍不行。关闭防火墙,还不行。
(如何获得IP,还可参考:https://blog.csdn.net/fwj380891124/article/details/18214145)
正准备放弃时,看到 https://blog.csdn.net/fengzheng22/article/details/17266105 其中有一句:
需要你用tcpclient访问的IP的端口正在被监听,否则就会显示积极拒绝,不是看他是否被占用,要看他是否在监听
想想我是直接整体复制的代码,不是双击窗体后单独写的formMain_load代码。而服务端应该是在formMain_load时开始监听。
于是重新修改代码,使得formMain_load时先运行服务端监听的代码。重新生成并运行,正常。这个错误太低级。
如果在局域网两台电脑上分别运行客户端和服务端,要确保能ping通,检查防火墙规则。参考这里:https://jingyan.baidu.com/article/a65957f4f557cb24e67f9ba6.html
2、另外,这里还有个例子:https://www.jb51.net/article/130148.htm
3、参考:https://www.cnblogs.com/straight/articles/7660889.html
socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)。
如果作为一个服务器,在调用socket()、bind()之后就会调用listen()来监听这个socket,如果客户端这时调用connect()发出连接请求,服务器端就会接收到这个请求。
isten函数的第一个参数即为要监听的socket描述字,第二个参数为相应socket可以排队的最大连接个数。socket()函数创建的socket默认是一个主动类型的,listen函数将socket变为被动类型的,等待客户的连接请求。
TCP服务器端依次调用socket()、bind()、listen()之后,就会监听指定的socket地址了。TCP客户端依次调用socket()、connect()之后就向TCP服务器发送了一个连接请求。TCP服务器监听到这个请求之后,就会调用accept()函数取接收请求,这样连接就建立好了。之后就可以开始网络I/O操作了,即类同于普通文件的读写I/O操作。
4、TCP协议三次握手过程分析 参考:http://www.cnblogs.com/rootq/articles/1377355.html
5、C# TCP多线程服务器示例 参考:https://www.cnblogs.com/zhangxiaoyong/p/6486311.html
6. C# socket端口复用-多主机头绑定 参考:https://www.cnblogs.com/viewcozy/p/4666137.html
7、定时执行、一对多 参考: http://www.cnblogs.com/chenxizhang/archive/2011/09/10/2172994.html
8、在同步模式中,在服务器上使用Accept方法接入连接请求,而在客户端则使用Connect方法来连接服务器。相对地,在异步模式下,服务器可以使用BeginAccept方法和EndAccept方法来完成连接到客户端的任务,在客户端则通过BeginConnect方法和EndConnect方法来实现与服务器的连接。 参考:http://www.cnblogs.com/sunev/archive/2012/08/07/2625688.html
9、C#的IPAddress IPEndPoint 参考 https://www.cnblogs.com/2Yous/p/5797592.html