博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络编程之协议
阅读量:5300 次
发布时间:2019-06-14

本文共 1480 字,大约阅读时间需要 4 分钟。

四.套接字(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

简单使用                                                                                               

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)

socket参数的详解

socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None)
 

转载于:https://www.cnblogs.com/wr13640959765/p/9334809.html

你可能感兴趣的文章
初始面向对象
查看>>
<松本行弘的程序世界> 读书笔记
查看>>
jQuery 效果
查看>>
docker一键安装
查看>>
leetcode Letter Combinations of a Phone Number
查看>>
kbhit()
查看>>
Exercise 34: Accessing Elements Of Lists
查看>>
Typeof instanceOf Call Apply Bind
查看>>
oracle函数中lead,lag,over,partition by 的使用
查看>>
Java InetAddress.getByAddress()的使用
查看>>
个人知识管理利器wiz
查看>>
HTML 之 动画
查看>>
CF724E Goods transportation
查看>>
属性选择符
查看>>
九章算法系列(#3 Binary Tree & Divide Conquer)-课堂笔记
查看>>
添加自定义的搜索引擎到chrome浏览器的右键菜单中
查看>>
mysql 事务提交过程
查看>>
SharedPreferences用法
查看>>
javascript去掉空格
查看>>
项目管理中相关概念
查看>>