Socket构建服务端及客户端通讯

服务端

# 导入socket库
from socket import *

# 主机地址为空字符串表示,所有的地址都绑定( 为0.0.0.0也一样 )
# 包括环回地址,所有网络接口的IP地址:127.0.0.1
# 客户端必须事先知道服务端的地址才能连接成功
HOST = '0.0.0.0'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)

# 创建socket,指明协议,AF_INET表示是IPv4协议,SOCK_STREAM表示是tcp协议
tcpSerSock = socket(AF_INET, SOCK_STREAM)

# 绑定地址和端口,表示使用这个地址
# HOST为空字符串表示本机所有ip, port为21567
tcpSerSock.bind(ADDR)

# 使用socket处于监听状态,参数大意是指允许等待连接的客户端的最大数量
# 这个TCP服务进程监听在本机所有ip,port为21567,等待客户端的连接.
tcpSerSock.listen(5)

print('等待客户端连接......')

# accept<阻塞式>等待连接请求,有客户端连接上来.
# 只有服务端程序调用了accept,
# 才会有syn ack,客户端收到后发送ack,三次握手完成,连接才能成功

# 注意,这里返回了一个新的socket:tcpCliSock用来和这个连接上来的客户端进行通信
# 原来的tcpSerSock还是负责监听
tcpCliSock, addr = tcpSerSock.accept()
print('连接来自:', addr)

while True:
    # 阻塞式等待接收消息,BUFSIZ指定了一次最多获取多少个bytes的消息
    # 返回的是bytes类型
    # 缺省是阻塞模式,可以设置socket为nonblocking
    data = tcpCliSock.recv(BUFSIZ )
    
    # 当对方关闭连接的时候,返回空bytes
    if not data:
        tcpCliSock.close()
        break

    # 接受到的是bytes类型,需要解码
    rstr = data.decode()
    print(rstr)

    # 发送消息send不一定能发送所有的数据
    # sendall 会反复尝试,直到所有的数据都发送完毕
    # 发送的也必须是bytes类型
    tcpCliSock.sendall(f'** {rstr}'.encode())
tcpSerSock.close()

客户端

# 导入socket库
from socket import *

HOST = '127.0.0.1'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)

# 创建socket,指明协议
tcpCliSock= socket(AF_INET, SOCK_STREAM)

# 连接远程地址和端口,发送syn,等待syn ack,也是阻塞式的
tcpCliSock.connect(ADDR)

while True:
    data = input('>> ')
    if not data:
        break
    # 发送消息,必须是bytes类型
    tcpCliSock.send(data.encode())

    # 阻塞式等待接收消息
    data = tcpCliSock.recv(BUFSIZ )

    # 当对方关闭连接的时候,返回空字符串
    if not data:
        break
    # 解码打印字符串
    print(data.decode)

tcpCliSock.close()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • “我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容“ TC...
    骑士恨煎蛋阅读 326评论 0 0
  • 1、连接服务器2、监听状态3、发送4、当Stream 的状态为NSStreamEventHasBytesAvail...
    AlexLi_阅读 384评论 0 0
  • 计算机网络概述 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输。 按照计算机网络的定义,通过一定...
    蛋炒饭_By阅读 1,209评论 0 10
  • 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编...
    程序员欧阳阅读 1,998评论 1 37
  • 7.2 面向套接字编程我们已经通过了解Socket的接口,知其所以然,下面我们就将通过具体的案例,来熟悉Socke...
    lucas777阅读 1,172评论 0 2