Socket网络编程

 

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

编写TCP时一般会用到的Socket模块,其方法主要包括:

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

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

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

·bind(address):绑定地址。

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

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

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

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

(1)服务端代码

代码如下:

# 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)客户端代码

代码如下:

# 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

将以上的代码分别保存为server.py和client.py文件,在cmd窗口运行服务端程 序,服务端开始进行监听;启动一个新的cmd窗口并运行客户端程序,服务端程 序提示连接已建立;在客户端输入要发送的信息后,服务端会根据提前建立的字 典进行自动回复。对话效果如图2-6所示。

Socket网络编程_第1张图片

图2-6    对话效果

 

你可能感兴趣的:(笔记)