python_day26__socket网络编程之简易聊天

   真的是好久没有写博客了,或者说是好久没有去学python了,可能最近导师和师姐那边的压力比较大吧,但是最近看开了,我只要完成你们的任务,我就可以去学我想要学的对象了啊
自己累不累的,也想清楚了,不要在华别人的眼光吧,简简单单的做自己就好了,都无所谓的,那么接下来加油吧,

#Author:'haijing'
#date:2018/11/7

#服务端:在别人的哪里
#必须线开启server端

import socket #socket是一个接口 内部封装了有关ip地址和端口号的信息 并且创建ip和端口号

sk = socket.socket() #创建一个socket对象s 服务端的sk对象和客户端的sk对象完全是不一样的
address = ('127.0.0.1',8000) #设置一个元组,元组内放的是ip和端口号:8000
sk.bind(address) #绑定ip和端口号,bind方法后跟的必须是一个元组
sk.listen(3) #3表示服务端最多和三个客户端同时建立通信,但是传送信息的话只能是一个一个的来
print('waiting...')
conn,addr = sk.accept() #等待,同时创建对象conn,一个conn代表了一个客户端

while 1:
#min收
data = conn.recv(1024) #sk是server端自己的sk,真正与客户端进行通信的对象是conn这个对象
data = str(data,'utf8') #将bytes类型转换为字符串类型,同时支持汉字
# if not data: break #如果接收到对方发是空子节,那么同时结束对话
if not data:
conn, addr = sk.accept() #如果对方退出了,则server端可以在这里另外接受新的网友
continue #继续去判断while循环的条件是否成立
print(data)

#min发 收了之后,便阻塞在这里,一直到发送过去
inp = input('>>>')
inp_server = bytes(inp,'utf8') #在python3中传送的值一定是bytes类型,在python2中没有此问题
conn.send(inp_server) #第33行 对应client.py下第十一行的接收函数data=sk.recv()



#Author:'haijing'
#date:2018/11/7

#客户端:在自己的电脑上 不需要去绑定 直接去连接
#必须线开启server端

import socket

sk = socket.socket() #创建socket对象 服务端的sk对象和客户端的sk对象完全是不一样的
address = ('127.0.0.1',8000) #设置元组 里面放的是需要连接的服务器的ip地址
sk.connect(address) #连接ip地址为127.0.0.1的服务端

while 1:
#jing发 不能发空(只发一个回车),否则对方会停在阻塞的状态
inp_jing = input('>>>')
if inp_jing == 'exit': #如果输入exit,那么聊天终止,但是还是会给对方放inp_haijing这一条消息的
break
inp_jing = bytes(inp_jing,'utf8')
sk.sendall(inp_jing) #如果字节很多的话,send()可能发不完,但是sendall可以发完的

#jing收
data = sk.recv(1024) #11行,一次最多收1024k 对应server.py下第33行的发送函数:conn,send('hello') 如果服务端不给发数据,那么就一直停在这里
data = str(data,'utf8') #将bytes类型转换为字符串类型,同时支持汉字
print(data)

sk.close #关的此客户端是和服务端之间的通信通道,同样server端也是有关掉通信通道的能力,但是server端一般是不会关的

haijing in HZ miss you
2018.11.07 晚
















原文地址:https://www.cnblogs.com/YiYA-blog/p/9926370.html