python_day26__socket网络编程之简易聊天

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


#Author:'haijing'

#date:2018/10/30
#服务端:在别人的哪里

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

#在socket类中family=AE_INET type=SOCK_STRAM;INET是在ipv4网络下的一个参数;
# SOCK_STRAM 是数据流 建立TCP连接的数据
# SOCK_Dgram 是数据流 建立UDP连接的数据

# family=AE_INET 对应的是ipv4,服务器之间的通信 这一句不加有可以,默认就是这样的
# family=AE_INET6 对应的是ipv6
# family=AE_UNIX Unix不同进程之间的通信
sk = socket.socket() #创建一个socket对象s 服务端的sk对象和客户端的sk对象完全是不一样的

address = ('127.0.0.1',8000) #设置一个元组,元组内放的是ip和端口号
#端口号都是自己任意添加,0-1024都是系统给我们设置的,能用的是1024之后的
#以后用8000以后就好了

sk.bind(address) #绑定ip和端口号,bind方法后跟的必须是一个元组

sk.listen(3) #3表示服务端最多和三个客户端同时建立通信,但是传送信息的话只能是一个一个的来

print('waiting...')
conn,addr = sk.accept() #等待客户端来连接服务端 sk.accept是一个元组,里面有两个内容,分别用conn和addr来盛
#conn拿到的是一个客户端的socket对象,addr是建立连接的client.py的ip地址和端口号等信息
# print(conn)#(<socket.socket fd=504, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8000), raddr=('127.0.0.1', 52686)>, ('127.0.0.1', 52686))
#conn中封装了建立的socket信息
#以上只是准备的信息,还并没有进行通信

#接下就是进行服务端和客户端之间进行通信
#客户端先发送第一条消息
# server下的方法:bind() listen() accept() recv()收 send()发的是一个字节 sendall()发,一次发不干净多次发
#client下的方法:connect()

#只要建立好连接之后,谁先发送都没有问题,关键是要一发一收 *****
#server端发
inp = input('>>>')
inp_server = bytes(inp,'utf8') #在python3中传送的值一定是bytes类型,在python2中没有此问题
conn.send(inp_server) #第33行 对应client.py下第十一行的接收函数data=sk.recv()

#server端收
data = conn.recv(1024) #sk是server端自己的sk,真正与客户端进行通信的对象是conn这个对象
#而且不可能只有一个客户端,所以手法数据都是通过conn找到对应的客户端进行通信的
#sk只是用于进行服务端和客户端之间进行连接用的
data = str(data,'utf8') #将bytes类型转换为字符串类型,同时支持汉字
print(data)


#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

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()

haijing in HZ miss you

2018.11.07 晚











猜你喜欢

转载自www.cnblogs.com/YiYA-blog/p/9926370.html