基于TCP/UDP协议的socket
Posted 阿强Wwlt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于TCP/UDP协议的socket相关的知识,希望对你有一定的参考价值。
基于TCP协议的socket
tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端
server端
import socket sk = socket.socket() sk.bind((\'127.0.0.1\',8898)) #把地址绑定到套接字 sk.listen() #监听链接 conn,addr = sk.accept() #接受客户端链接 ret = conn.recv(1024) #接收客户端信息 print(ret) #打印客户端信息 conn.send(b\'hi\') #向客户端发送信息 conn.close() #关闭客户端套接字 sk.close() #关闭服务器套接字(可选)
client端
import socket sk = socket.socket() # 创建客户套接字 sk.connect((\'127.0.0.1\',8898)) # 尝试连接服务器 sk.send(b\'hello!\') ret = sk.recv(1024) # 对话(发送/接收) print(ret) sk.close() # 关闭客户套接字
问题:有的在重启服务端时可能会遇到
解决方法:
#加入一条socket配置,重用ip和端口 import socket from socket import SOL_SOCKET,SO_REUSEADDR sk = socket.socket() sk.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #就是它,在bind前加 sk.bind((\'127.0.0.1\',8898)) #把地址绑定到套接字 sk.listen() #监听链接 conn,addr = sk.accept() #接受客户端链接 ret = conn.recv(1024) #接收客户端信息 print(ret) #打印客户端信息 conn.send(b\'hi\') #向客户端发送信息 conn.close() #关闭客户端套接字 sk.close() #关闭服务器套接字(可选)
基于UDP协议的socket
udp是无链接的,先启动哪一端都不会报错
简单使用
server端
import socket udp_sk = socket.socket(type=socket.SOCK_DGRAM) #创建一个服务器的套接字 udp_sk.bind((\'127.0.0.1\',9000)) #绑定服务器套接字 msg,addr = udp_sk.recvfrom(1024) print(msg) udp_sk.sendto(b\'hi\',addr) # 对话(接收与发送) udp_sk.close() # 关闭服务器套接字
client端
import socket ip_port=(\'127.0.0.1\',9000) udp_sk=socket.socket(type=socket.SOCK_DGRAM) udp_sk.sendto(b\'hello\',ip_port) back_msg,addr=udp_sk.recvfrom(1024) print(back_msg.decode(\'utf-8\'),addr)
以上是关于基于TCP/UDP协议的socket的主要内容,如果未能解决你的问题,请参考以下文章