套接字python编程-TCP

本文详细介绍了如何使用Python实现TCP套接字,包括服务器端处理`showmeOSinfo`和`showmeDiskinfo`指令,以及客户端与服务器的交互过程。通过实例演示了操作系统信息和磁盘信息的交换,适合初学者理解网络编程基础。

一、简介:套接字python编程-TCP

典型的网络应用是由一对程序(客户程序和服务器程序)组成。当运行两个程序时,创建了一个客户进程和服务器进程,同时通过从套接字读出和写入数据彼此之间进行通信。

流程:

创建套接字的流程
详细介绍

二、实践要求

编写一个可在局域网通讯的客户端和服务端程序要求:(1)客户端向服务端发送指令“show me OS info”,服务端返回该主机的操作系统基本信息给客户端,并通过屏幕输出;(2)客户端向服务端发送指令“show me Disk info”,服务端返回该主机的磁盘数量以及各自磁盘空间的大小。

三、代码实现

服务器端

serverSocket.py

#注释编码格式,防止乱码问题
#coding=utf-8      

from socket import *
import os

print("Server")

HOST = '192.168.43.122'         #服务器主机名(IP)
serverPort = 10024    #需要连接的服务器端口,需要一个可用的端口
BUFSIZE = 2048        #定义缓冲区大小
ADDR = (HOST,serverPort)

serverSocket=socket(AF_INET,SOCK_STREAM)    #创建欢迎套接字
serverSocket.bind(ADDR)             #将该服务器端口号与套接字关联
serverSocket.listen(5)       #等待并聆听客户敲门,设置5为请求连接的最大数

print('The server is ready to receive')

#用户敲门时,调用accept()创建connectionSocket的新套接字
connectionSocket,addr = serverSocket.accept()     

#与客户端连接成功
print('connect from ', addr)         

 #接收消息,decode()将byte转换为str
sentence = connectionSocket.recv(BUFSIZE).decode()        

print('Receive message >> ',sentence)

#执行客户端的请求,返回信息
if sentence == 'show me OS info':     
    message = ".".join(os.popen('systeminfo').readlines()).encode('utf-8')
    
elif sentence == 'show me Disk info':
    message = ".".join(os.popen('wmic diskdrive').readlines()).encode('utf-8')
else :
    message = 'invaild'.encode()

connectionSocket.send(message)


#客户端直接发送指令
'''
message = ".".join(os.popen(sentence).readlines()).encode('utf-8')    #返回操作系统信息,将系统读取的list转换为str,再转换为byte!!!    

connectionSocket.send(message)
'''


#大写处理
'''
capitalizedSentence = sentence.upper()      
connectionSocket.send(capitalizedSentence)          
'''
#关闭套接字
connectionSocket.close()
serverSocket.close()

客户端

clientSocket.py

#coding=utf-8
from socket import *

print('Client')


HOST= '192.168.43.155'   #需连接的服务器IP
serverPort = 10024     #需连接的服务器端口号
BUFSIZE = 2048 
ADDR = (HOST,serverPort)    #需连接的服务器地址

clientSocket = socket(AF_INET,SOCK_STREAM)   #创建客户套接字,流式数据
clientSocket.connect(ADDR)      #客户套接字与服务器连接

 #连续收集字符直到回车终止      
sentence = input('Input  sentence: ').encode()   #将str编码为byte格式

clientSocket.send(sentence)   #向服务器发送消息


'''
键入“show me OS info”,则返回操作系统信息
键入“show me Disk info"则返回磁盘信息
'''

modifiedSentence = clientSocket.recv(BUFSIZE).decode('utf-8')    #接收消息,并对byte消息进行解码

print('From server: ',modifiedSentence)


#关闭套接字
clientSocket.close()

四、说明

运行步骤

  1. 服务器配置好自己的IP。127.0.0.1是主机地址,通常可以连接局域网IP。命令行中输入【ipconfig】查看。
  2. 客户端配置要连接的服务器IP,TCP协议要求端口号一致
  3. 先运行服务器,再运行客户端。

补充

  • 信息在传输中是byte格式,需要encode()和decode()函数进行编码和解码,格式是utf-8
  • 创建套接字──socket()
    该调用要接收三个参数:af、type、protocol。
    参数af指定通信发生的区域:AF_UNIX、AF_INET、AF_NS等,而DOS、WINDOWS中仅支持AF_INET,它是网际网区域。因此,地址族与协议族相同。
    参数type 描述要建立的套接字的类型。面向连接的还是非连接分为 SOCK_STREAM(TCP:流式数据) 或 SOCK_DGRAM
    (UDP:报文段)
  • 指定本地地址──bind()
    绑定地址(host,port)到套接字, 在 AF_INET下,以元组(host,port)的形式表示地址。注意,bind的参数只有1个,是元组形式。
<think>我们根据用户需求:学习PythonTCPsocket编程,提供示例代码。基于引用内容,我们知道TCPsocket的基本步骤:创建socket对象、连接、发送数据、关闭连接。同时,引用提供了Pythonsocket模块的使用。我们将分别实现一个简单的TCP服务器和客户端。注意:在实现中,服务器需要绑定地址和端口并监听,客户端需要连接服务器。步骤:服务器端:1.创建socket2.绑定地址和端口3.监听连接4.接受连接5.接收和发送数据6.关闭连接客户端:1.创建socket2.连接服务器3.发送和接收数据4.关闭socket由于引用[1]中给出了伪代码,我们将用Python实现类似的步骤。注意:在Python中,socket模块提供了必要的函数。引用[2]提到了Pythonsocket模块,所以我们使用它。我们将分别编写一个简单的TCP服务器和客户端的代码示例。服务器将接收客户端发来的数据,然后回复一个简单的消息。客户端将发送一条消息,并打印服务器的回复。注意:使用TCP,所以创建socket时使用socket.SOCK_STREAM。</think> 好的,我将为您提供 Python TCP 套接字编程的完整实现示例和解释。以下是基于您需求的分步指南: ### Python TCP Socket 编程基础 TCP 套接字编程需要实现客户端和服务器端: 1. **服务器端**:监听特定端口,接受连接请求 2. **客户端**:发起连接到服务器 #### TCP 服务器示例 ```python import socket # 1. 创建 TCP socket server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2. 绑定地址和端口 HOST = '127.0.0.1' # 本地回环地址 PORT = 65432 # 监听端口(>1024) server_socket.bind((HOST, PORT)) # 3. 开始监听 server_socket.listen() print(f"[*] 服务器正在监听 {HOST}:{PORT}") # 4. 接受客户端连接 conn, addr = server_socket.accept() print(f"[+] 接收到来自 {addr} 的连接") with conn: while True: # 5. 接收数据(最多1024字节) data = conn.recv(1024) if not data: break print(f"接收到数据: {data.decode()}") # 6. 发送响应 conn.sendall(b"Message received by server") # 7. 关闭连接 server_socket.close() ``` #### TCP 客户端示例 ```python import socket # 1. 创建 TCP socket client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2. 连接服务器 HOST = '127.0.0.1' # 服务器地址 PORT = 65432 # 服务器端口 client_socket.connect((HOST, PORT)) # 3. 发送数据 message = "Hello TCP Server!" client_socket.sendall(message.encode()) # 4. 接收响应 data = client_socket.recv(1024) print(f"服务器响应: {data.decode()}") # 5. 关闭连接 client_socket.close() ``` ### 关键概念说明 1. **`socket.AF_INET`**:使用 IPv4 地址族 2. **`socket.SOCK_STREAM`**:指定 TCP 协议 3. **`bind((host, port))`**:绑定地址和端口 4. **`listen()`**:开启监听模式 5. **`accept()`**:阻塞等待客户端连接 6. **`recv(bufsize)`**:接收数据(TCP保证数据完整性) 7. **`sendall(data)`**:发送所有数据(确保完整传输) 8. **三次握手**:TCP 连接建立过程[^1] ### 运行流程 1. 先启动服务器(阻塞在 `accept()`) 2. 再启动客户端 3. 观察控制台输出: ``` # 服务器输出 [*] 服务器正在监听 127.0.0.1:65432 [+] 接收到来自 ('127.0.0.1', 54122) 的连接 接收到数据: Hello TCP Server! # 客户端输出 服务器响应: Message received by server ``` ### 实际应用场景 1. Web 服务器(HTTP/HTTPS) 2. 文件传输协议(FTP) 3. 数据库连接(MySQL/PostgreSQL) 4. 即时通讯应用 5. 远程控制系统[^2]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值