python的一个hello/hi的简单的网络聊天程序

python网络聊天程序的代码:

服务端:

# -*- coding:utf-8 -*-
import socket
# 给定IP地址与端口号,其中'127.0.0.1'代表本机地址
host = '127.0.0.1'
port = 2000
# 创建 socket 对象
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 绑定端口
server.bind((host,port))
# 开始监听TCP传入连接,可挂起5个链接
server.listen(5)
print("等待客户端链接")
# 接受TCP连接,返回的sock是新的套接字对象,可以用来接收和发送数据。addr是连接客户端的地址
sock,addr=server.accept()

while True:
    data = sock.recv(1024) # 接受TCP套接字的数据。数据以字符串形式返回,且指定最大长度为1024
    if not data:
        print("断开链接")
        sock.close() # 关闭收到的套接字
        break
    print("客户端: "+ data.decode("utf-8"))
    msg = input("服务端: ")
    sock.send(msg.encode("utf-8"))

server.close() # 关闭建立的套接字

客户端:

# -*- coding:utf-8 -*-
import socket
# 给定IP地址与端口号,其中'127.0.0.1'代表本机地址
host = '127.0.0.1'
port = 2000
# 创建 socket 对象
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 主动初始化TCP服务器连接
client.connect((host,port))
while True:
    msg = input('输入:')
    if msg == 'exit':
        break
    client.send(msg.encode("utf-8"))
    data = client.recv(1024)
    data = data.decode("utf-8")
    print("服务端: "+ data)
client.close() # 关闭套接字

运行结果截图如下:

服务端:

python的一个hello/hi的简单的网络聊天程序_第1张图片

客户端:

python的一个hello/hi的简单的网络聊天程序_第2张图片

如图所示,该程序需要先运行server.py,再运行client.py,否则会报错。可以传入英文或中文,一次性只能传输1024个字符,而且只有在收到了对方的回复后才能继续传输下一段,功能比较简陋。而如果客户端发送了“exit”,则客户端会直接关闭套接字,于是服务端会收到空的内容,然后输出“断开链接”,然后也关闭套接字。

在liunx中,通过strace命令跟踪程序调用,发现python的API基本是对Linux的API进行封装

Python Linux

socket(AF_INET,SOCK_STREAM)

int socket(int domain, int type, int protocol);

bind((host,port))

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

accept()

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
listen([blacklog])

int listen(int sockfd, int backlog);

recv(BUFERSIZE)

ssize_t recv(int sockfd, void *buf, size_t len, int flags);

close()

int close(int socketfd)

send(string[,flag])

ssize_t send(int sockfd, const void *buf, size_t len, int flags);

你可能感兴趣的:(python的一个hello/hi的简单的网络聊天程序)