python_day26__socket网络编程基础编程知识

server.py (server服务端):

#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 服务器之间的通信
# family=AE_UNIX Unix不同进程之间的通信
sk = socket.socket() #创建一个socket对象sk 服务端的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)


client.py(client客户端):
#Author:'haijing'
#date:2018/10/30
#客户端:在自己的电脑上 不需要去绑定 直接去连接

import socket
sk = socket.socket() #创建socket对象 服务端的sk对象和客户端的sk对象完全是不一样的

address = ('127.0.0.1',8000) #设置元组 里面放的是需要连接的服务器的ip地址
sk.connect(address) #连接ip地址为127.0.0.1的服务端

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

#client端发
inp_client = input('>>>')
inp_client = bytes(inp_client,'utf8')
sk.send(inp_client)

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

接下来是这两部分py文件的执行图片:
server端:


client端:


原理图:


haijing in HZ 最近压力好大,要去猜测别人的想法 真的是很累 而且明明已经很尽力的去做事了,为什么还是被别人给插了一刀
2018.11.1 不过今天傍晚的云彩倒还是挺漂亮的,附上图的吧还是,希望某人也可以看得到













猜你喜欢

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