做坑人网站二维码,浏览器直接进入网站,网站地图定位用什么技术做,产品ui设计公司目录1 socket的使用1.1 TCP方法1.2 UDP方法2 局域网内连接2.1总结1 socket的使用
1.1 TCP方法
在socket中使用socket.socket建立会话#xff0c;如果是服务器#xff0c;需要绑定服务器地址和端口号#xff0c;然后进行循环监听#xff0c;当有客户端连接时再接收数据。 …
目录1 socket的使用1.1 TCP方法1.2 UDP方法2 局域网内连接2.1总结1 socket的使用
1.1 TCP方法
在socket中使用socket.socket建立会话如果是服务器需要绑定服务器地址和端口号然后进行循环监听当有客户端连接时再接收数据。 代码如下:
import socketdef tcpServer(address,port8686):# stream代表tcp方式server socket.socket(socket.AF_INET,socket.SOCK_STREAM)server.bind((address, port))server.listen()print(Server start)while True:client, ad server.accept()data client.recv(1024)# 处理接收到的数据print(receive from : ,ad, data: , data)# 回传数据给客户端client.send(I have received your data.encode(utf-8))# 如果接收到close则关闭服务器c [chr(data[i]) for i in range(5)]if .join(c) close:breakserver.close()print(Server close)if __name__ __main__:address localhostport 8686tcpServer(address,port)在客户端使用send方法向服务器发送一次数据
import socketdef tcpSend(address,port,message):server socket.socket(socket.AF_INET, socket.SOCK_STREAM)server.connect((address, port))server.send(message.encode(utf-8))data server.recv(1024)server.close()return dataif __name__ __main__:address localhostport 8686message messagereceive tcpSend(address,port,message)print(receive: , receive)1.2 UDP方法
UDP方法面向无连接在socket设置会话的属性时参数修改为socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 服务器端接收数据是一次接收数据和端口地址代码如下
import socketdef udpServer(address,port8686):# dgram代表udp方式server socket.socket(socket.AF_INET, socket.SOCK_DGRAM)server.bind((address, port))print(Server start)while True:data, ad server.recvfrom(1024)# 处理接收到的数据print(receive from : , ad, data: , data)server.sendto(I have received your data.encode(utf-8),ad)c [chr(data[i]) for i in range(5)]if .join(c) close:breakserver.close()print(Server close)if __name__ __main__:address localhostport 8686udpServer(address,port)客户端
import socketdef udpSend(address,port,message):server socket.socket(socket.AF_INET, socket.SOCK_DGRAM)server.connect((address, port))server.send(message.encode(utf-8))data server.recv(1024)server.close()return dataif __name__ __main__:address localhostport 8686message messagereceive tcpSend(address,port,message)print(receive: , receive)2 局域网内连接
当将服务器ip地址替换address时在两台主机上测试往往会发生这样的错误 ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接 其中一个很大的原因就是个人主机对局域网的连接有防火墙设置。 解决方法在服务器端通过 控制面板-系统和安全-Windows Defender 防火墙-高级设置-入站/出站规则(入站和出站都要)找到文件和打印机共享(回显请求 - ICMPv4-In/Out) 域中启用规则域表示当前局域网。客户端无需设置即可实现两台主机的测试。 2.1
在客户端接收来自服务器的数据后未关闭会话时不能print(data)会导致输入输出错误。
def tcpSend(address,port,message):server socket.socket(socket.AF_INET, socket.SOCK_STREAM)server.connect((address, port))server.send(message.encode(utf-8))data server.recv(1024)print(data) # 会在这里陷入等待server.close()return data总结
简述了TCP和UDP两种方法的应用以及解决服务器端防火墙导致局域网内两台主机不能成功连通的问题。但是对于服务器还有更多的内容需要设置没有学在此不深究。