码迷,mamicode.com
首页 > 其他好文 > 详细

基于TCP/UDP协议的socket

时间:2018-01-27 19:11:07      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:import   info   代码   启动服务   连接服务器   port   soc   套接字   重用   

基于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

标签:import   info   代码   启动服务   连接服务器   port   soc   套接字   重用   

原文地址:https://www.cnblogs.com/wanglongtai/p/8366459.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!