Python程序设计之网络编程(二)

200 阅读1分钟
参与拿奖:本文已参与「新人创作礼」活动,一起开启掘金创作之路
1.运行效果

服务器端:负责接受消息

image.png

客户端:负责发送消息

image.png

2.使用TCP实现终端通信

①服务器端,包括创建套接字,绑定,监听,接送消息

import socket
def main():
    words={"Hello":"Hello","Hi":"Hi"}
    HOST=''
    PORT=50007
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #绑定socket
    s.bind((HOST,PORT))
    #监听
    s.listen(1)
    print('Listening at port:',PORT)
    conn,addr=s.accept() # 接收客户端发送的信息
    print('Connect by:',addr) # 打印连接信息
    while True:
        data=conn.recv(1024) # ;接受1024字节大小的数据
        data=data.decode() # 将接受的数据进行解码
        if not data:
            break
        print('Received message:',data)
        conn.sendall(words.get(data,'Nothing').encode()) # 根据接受的信息,发送对应的信号
    conn.close() # 关闭连接
    s.close() # 关闭服务器

if __name__ == '__main__':
    main()

②客户端,包括连接服务器,发送消息

import socket
import sys
def main():
    #服务器端IP
    HOST='127.0.0.1'
    #服务器端端口号
    PORT=50007
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    try:
        s.connect((HOST,PORT)) # 连接服务器
    except Exception as e:
        print('Server not found or not open!')
        sys.exit()
    while True:
        c=input('Input the content you want to send:')
        #发送数据
        s.sendall(c.encode()) # 发送消息
        #从服务器端接受数据
        data=s.recv(1024) # 接收消息
        data=data.decode() # 解码
        print('Received:',data) # 打印接收的消息
        if c.lower()=='bye': # 收到信号,退出循环
            break
    s.close() # 关闭客户端


if __name__ == '__main__':
    main()

③运行方式

先运行服务器端代码,并始终保持运行,然后另外开一个窗口运行客户端代码

学习笔记

1.客户端连接方式,使用元组形式建立连接

s.connect((HOST,PORT))

2.服务器端使用元组形式绑定端口号和端口

    #绑定socket
    s.bind((HOST,PORT))

3.初始化套接字:

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

4.从服务器端接收数据

        data=conn.recv(1024)