1. 环境准备
(1) vmware workstation上启动两台虚拟机 rhel5.0 server i386, 每台都有网卡,且配置为NAT方式(因为在学校做实验,用学校的DHCP设备分配IP需要学号/密码验证,而我只有一个学号密码,用Bridge方式只能分配一个IP;故只能采用NAT方式,因为这种方式的DHCP服务器上宿主物理机上虚拟出来的)
(2) 设置网卡配置文件以DHCP方式获取到IP地址
cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp
(3) 重启网络服务
service network restart
(4) 注意需要把服务器端的防火墙关闭
service iptables stop
2. TCP socket服务器
select服务器
# -*- coding: gb18030 -*- import socket, select host = socket.gethostname() port = 1234 s = socket.socket() s.bind((host, port)) s.listen(5) inputs = [s] while True: rs, ws, es = select.select(inputs, [], []) for r in rs: if r is s: #r是"服务器端的监听套接字" c, addr = s.accept() print 'Got connection from ', addr inputs.append(c) else: #r是"服务器端的套接字" try: data = r.recv(1024) disconnected = not data except socket.error: disconnected = True if disconnected: print r.getpeername(), 'disconnected' inputs.remove(r) else: print data
asyncore服务器(用async_chat处理连接会话)
# -*- coding: gb18030 -*- from asyncore import dispatcher from asynchat import async_chat import socket, asyncore #select在linux和widows上都可以用 #poll在windows上不能用,而且asyncore.loop()中好像用到了poll PORT = 5005 NAME = "TestChat" class ChatSession(async_chat): '''处理服务器和一个用户之间连接的类''' def __init__(self, server, sock): async_chat.__init__(self, sock) self.server = server #在session中关联server self.set_terminator("\r\n") self.data = [] self.push("Welcome to %s"%self.server.name) def collect_incoming_data(self, data): self.data.append(data) def found_terminator(self): '''如果发现了一个终止对象,也就发现了一个完整的行,将其广播给所有人''' line = ''.join(self.data) self.data = [] self.server.broadcast(line) def handle_close(self): async_chat.handle_close(self) self.server.disconnect(self) class ChatServer(dispatcher): '''接受连接并且产生单个会话的类。它会处理其他会话的广播''' def __init__(self, port, name): dispatcher.__init__(self) self.create_socket(socket.AF_INET, socket.SOCK_STREAM) self.set_reuse_addr() self.bind(('',port)) self.listen(5) self.name = name self.sessions = [] #在server中关联session def broadcast(self, line): for session in self.sessions: session.push(line + "\r\n") def handle_accept(self): conn, addr = self.accept() self.sessions.append(ChatSession(self, conn)) if __name__ == "__main__": s = ChatServer(PORT, NAME) try: asyncore.loop() except KeyboardInterrupt: print
3. TCP socket客户机
import socket import time host = socket.gethostname() port = 1234 s = socket.socket() s.connect((host, port)) while True: str_to_server = raw_input("send sth. to server: ") s.send(str_to_server) #print s.recv(1024)
参考文档
socket — Low-level networking interface: http://docs.python.org/2/library/socket.html
socket programing HOWTO: http://docs.python.org/2/howto/sockets.html
python网络编程 http://www.cnblogs.com/hnrainll/archive/2012/10/25/2738094.html
相关推荐
进一步理解和掌握基于Python进行TCP套接字编程的知识,理解SMTP报文格式,能基于Python编写一个简单的SMTP客户端程序。 2实验条件 装有python环境的电脑两台 局域网环境 已经正常运行的邮件服务器 3实验报告内容及...
一旦有客户端连接,服务器就会为每个客户端创建一个新的套接字用于双方的数据交换。 在描述中提到的"一对多"通信意味着服务器可以同时服务于多个客户端。为了实现这一点,我们需要在服务器端使用多线程。当一个...
在给定的文件中,包括了TCP服务器(TCPServer.py)、UDP客户端(UDPClient.py)、UDP服务器(UDPServer.py)和TCP客户端(TCPClient.py),它们分别展示了如何在Python中实现这两种协议的客户端-服务器架构。...
流式套接字,也称为TCP(Transmission Control Protocol)套接字,是网络编程中常用的一种数据传输...对于初学者来说,理解TCP套接字的工作原理及其应用是网络编程的基础,也是进一步学习其他网络协议和技术的基石。
当客户端连接时,服务器会创建一个新的套接字连接。 2. **广播数据**:服务器接收到广播消息后,通过已建立的连接向所有客户端发送。这通常涉及到遍历客户端连接列表并逐个发送消息。 3. **管理客户端**:服务器需要...
本示例将详细介绍如何使用Python实现一个简单的TCP套接字通信Demo,包括客户端和服务端的代码实现,以及它们如何进行交互。 首先,我们要理解TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信...
了解TCP套接字的原理并能熟练地在服务器和客户端之间建立连接、交换数据,是成为一名合格的网络程序员的基础。通过实践,开发者可以进一步优化TCP套接字的性能,如使用非阻塞I/O、多线程或异步编程来处理多个并发...
"网络套接字实现服务器返回客户机发送数据"这个标题涉及到的是客户端-服务器(Client-Server)架构中的数据交互过程。下面将详细阐述网络套接字的工作原理、如何实现服务器响应客户端发送的数据,以及相关的编程知识...
这个简单的TCP客户端-服务器示例为你提供了一个基础模板,你可以根据需求进行扩展,比如添加错误处理、多线程支持,或者实现更复杂的通信协议。在实际项目中,通常会使用更高层次的库如Twisted或asyncio来简化异步I/...
1. **socket模块**:Python的socket库是操作系统提供的网络通信接口的封装,它允许开发者创建和管理网络套接字,用于建立TCP连接。在tsTserv3.py和tsTclnt3.py中,首先需要导入socket模块。 2. **创建服务器**: -...
在"利用TCP的方式上传文件"这一场景中,客户端首先需要创建一个TCP套接字,然后通过这个套接字与服务器建立连接。连接建立后,客户端可以将文件按照字节流的形式发送到服务器端。服务器端同样需要一个监听套接字来...
在本实验中,将学习Python中TCP连接的套接字编程的基础知识:如何创建套接字,将其绑定到特定的地址和端口,以及发送和接收HTTP数据包。你还将学习一些HTTP首部格式的基础知识。 你将开发一个处理一个HTTP请求的Web...
通过阅读和分析这些代码,我们可以学习到如何使用系统提供的socket库函数来创建、连接、读写TCP套接字,以及如何处理并发连接和错误处理。 源代码的学习可以帮助我们理解以下关键概念: 1. socket()函数:创建套接...
它提供了低级别的网络通信接口,允许程序员创建套接字对象,进而进行网络连接。 2. **TCP协议**:TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。它通过三次握手建立连接,并通过序列号和确认应答机制...
本文实例讲述了Python网络编程之TCP套接字简单用法。分享给大家供大家参考,具体如下: 上学期学的计算机网络,因为之前还未学习python,而java则一知半解,C写起来又麻烦,所以一直都没有真正实现过TCP套接字编程。...
例如,使用Python的socket库可以创建一个简单的TCP套接字客户端,连接到MySQL服务器,发送SQL查询,并接收返回的结果。 下面是一些可能包含在"完整的套接字数据库客户端"中的关键知识点: 1. **TCP/IP协议栈**:...
【TCP网口套接字聊天程序】是一种基于TCP协议实现的网络通信应用,它允许两台计算机之间进行类似QQ的实时聊天。在这个程序中,一台计算机作为服务器,提供监听和接收连接的服务,另一台计算机作为客户端,发起连接...
同步套接字服务器是一种网络通信模型,主要用于在客户端和服务器之间建立可靠的数据传输连接。它基于TCP/IP协议栈,提供了一种同步的、面向连接的通信方式,确保数据的完整性和顺序性。在这个模型中,服务器端等待...
1. 创建套接字:使用socket库创建一个TCP套接字,如`socket.socket(socket.AF_INET, socket.SOCK_STREAM)`。 2. 绑定地址:使用`bind()`方法绑定IP和端口号,让服务端在特定的网络位置等待连接。 3. 监听连接:使用`...
在Linux环境中实现聊天应用,我们需要利用TCP套接字编写客户端和服务器端的代码。服务器端通常会监听特定的端口,等待客户端的连接。一旦有客户端连接,服务器就会创建一个新的套接字与之通信,接收并处理客户端发送...