CherieLi Student

socket网络编程

2021-06-21
CherieLi

Socket是计算机之间进行网络通信的一套程序接口,相当于在发送端和接收端之间建立了一个通信管道。在实际应用中,一些远程管理软件和网络安全软件大多依赖于Socket来实现特定功能,由于TCP(Transmission Control Protocol,传输控制协议)方式在网络编程中应用得非常频繁,此处给出具体应用实例。   编写TCP时一般会用到的Socket模块,其方法主要包括:

·connect(address):连接远程计算机

·send(bytes[,flags]):发送数据

·recv(bufsize[,flags]):接收数据

·bind(address):绑定地址

·listen(backlog):开始监听,等待客户端连接

·accept():响应客户端的一个请求,接受一个连接

 使用TCP进行通信,首先需要在客户端和服务端建立连接,并且要在通信结束后关闭连接以释放资源。由于TCP是面向连接的,因此相对于UDP提供更高的可靠性。

Demo: 设计一个对话系统。该应用分为两个部分,一部分为服务端,一部分为客户端。客户端发送请求信息,服务端返回应答信息。两部分代码如下所示。

(1)服务端代码 server.py

	# coding=UTF-8
	import socket
	language = {'what is your name':'I am Tom','how old are you':'25','bye':'bye!'}
	HOST = "127.0.0.1"
	PORT = 6666
	s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
	s.bind((HOST,PORT))
	s.listen(1)
	print("Listing at port 6666")
	conn,addr = s.accept()
	print('Connect by:', addr)
	while True:
	        data = conn.recv(1024)
	        data = data.decode()
	        if not data:
	                break
	        print('Received message:', data)
	        conn.sendall(language.get(data,'Nothing').encode())
	conn.close()
	s.close()

(2)客户端代码 client.py

	# coding=UTF-8
	import socket,sys
	HOST = "127.0.0.1"
	PORT = 6666
	s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
	try:
	    s.connect((HOST,PORT))
	except Exception as e:
	    print('server not found!')
	    sys.exit()
	while True:
	    c = input('YOU SAY:')
	    s.sendall(c.encode())
	    data = s.recv(1024)
	    data = data.decode()
	    print('Received:',data)
	    if c.lower()=='再见':
	        break

在一个窗口运行服务端程序,服务端开始进行监听;启动一个新的窗口并运行客户端程序,服务端程序提示连接已建立;在客户端输入要发送的信息后,服务端会根据提前建立的字典进行自动回复。对话效果,如图所示:

image

image

image

image


上一篇 spdk

Comments

Content