基于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的主要内容,如果未能解决你的问题,请参考以下文章

套接字,TCP,UDP

ModBus(RTU TCP UDP通信)及利用socket通信(DTU)实现Modbus-RTU通信协议

网络编程-Socket编程(异步通讯)(Tcp,Udp)

网络编程-Socket编程(异步通讯)(Tcp,Udp)

基于TCP协议的socket套接字编程

socket http tcp udp ip 协议