7-2 套接字Socket与套接字编程
本节编程练习不计算学习进度,请电脑登录imooc.com操作

套接字Socket与套接字编程

要进行网络通信,需要建立起通信双方的连接,连接的双方分别称为客户端和服务端,在Python中,使用套接字socket来建立起网络连接。
套接字包含在socket模块中:

import socket
socket.socket()

对于客户端和服务端,都是使用socket来建立连接的,但是在使用行为上,客户端和服务端会有一些不一样。
服务端建立需要四个步骤:新建socket、绑定IP和端口(bind)、监听连接(listen)、接受连接(accept)。
客户端建立则简单一些,仅需两个步骤:新建socket、连接服务端(connect)。
当网络连接上以后,客户端和服务端就可以进行数据通信了,套接字通过send()函数发送数据,通过recv()函数接收数据。


先看服务端的过程,新建一个server.py的文件:

import socket

server = socket.socket() # 1. 新建socket
server.bind(('127.0.0.1', 8999)) # 2. 绑定IP和端口(其中127.0.0.1为本机回环IP)
server.listen(5) # 3. 监听连接
s, addr = server.accept() # 4. 接受连接
print('connect addr:{}'.format(addr))
content =s.recv(1024)
print(str(content, encoding='utf-8'))  # 接受来自客户端的消息,并编码打印出来
s.close()

如上,服务端就编写完毕,接下来是编写客户端,新建一个client.py的文件:

import socket

client = socket.socket() # 1. 新建socket
client.connect(('127.0.0.1', 8999)) # 2. 连接服务端(注意,IP和端口要和服务端一致)
client.send(bytes('Hello World. Hello Socket', encoding='utf-8')) # 发送内容,注意发送的是字节字符串。
client.close()

接着在一个终端先运行服务端:

python server.py

然后再在另外一个终端运行客户端:

python client.py

在服务端的终端,将会输出以下信息:

connect addr:('127.0.0.1', 50382)
b'Hello World. Hello Socket'

任务

请改造server.py和client.py文件,实现一个echo服务器,使得client.py可以循环接收用户输入并发送给服务端,服务端在收到消息后,也把消息原样返回给client。

  1. # Enter a code
下一节