python远程聊天_基于Python完成一个hello/hi的简单的网络聊天程序

一、Socket 套接字简介

套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。

传输层实现端到端的通信,因此,每一个传输层连接有两个端点。那么,传输层连接的端点是什么呢?不是主机,不是主机的IP地址,不是应用进程,也不是传输层的协议端口。传输层连接的端点叫做套接字(socket)。根据RFC793的定义:端口号拼接到IP地址就构成了套接字。所谓套接字,实际上是一个通信端点,每个套接字都有一个套接字序号,包括主机的IP地址与一个16位的主机端口号,即形如(主机IP地址:端口号)。例如,如果IP地址是210.37.145.1,而端口号是23,那么得到套接字就是(210.37.145.1:23)。

二、基于Python实现一个简单的网络聊天程序

此例中使用了Python中的Socket API接口,程序的功能就是:客户端向服务器发送一条消息,服务器端返回一条消息给客户端,以实现简单的网络聊天。

server.py

importsocket

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)

s.bind(('127.0.0.1',9999)) #监听端口

s.listen(1) #调用listen()方法开始监听端口,传入的参数指定等待连接的最大数量

sock,addr =s.accept()

buf= sock.recv(1024).decode()whileTrue:if buf!='exit':print('客户端:’+buf)

data = input('服务端:')

sock.send(data.encode())if data=='exit':breakbuf=sock.recv(1024).decode()

client.py

importsocketimportsys#创建一个socket

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#建立连接

s.connect(('127.0.0.1', 9999))whileTrue:#发送数据:

try:

data= input("客户端说:")

s.send(data.encode())

buf= s.recv(1024).decode()if buf!='exit':print("服务端说:" +buf)except:print("Dialogue Over")

s.close()

sys.exit(0)

打开两个命令行窗口,一个运行服务器程序,另一个运行客户端程序,就可以看到效果。

三、对比Python socket API 和 Linux socket API

Python

Linux

socket(socket.AF_INET,socket.SOCK_STREAM)

socket(PF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 3

connect((host,port))

connect(3,{sa_family=AF_INET,sin_port=htons(12345),sin_addr("127.0.0.1")},[16]))=4

serv_sock.accept()

accept(3,{sa_family=AF_INET,sin_port=htons(12345),sin_addr("127.0.0.1")},[16]))=4

serv_sock.bind((host,port))

bind(3,{sa_family=AF_INET,sin_port=htons(12345),sin_addr("0.0.0.0")},16)=0

accept()

accept(3,{sa_family=AF_INET,sin_port=htons(2345),sin_addr("192.168.8.xx)},[16]))=4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值