`

python 网络(一、TCP套接字服务器-客户端)

 
阅读更多

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套接字编程的基础知识 实验报告

    进一步理解和掌握基于Python进行TCP套接字编程的知识,理解SMTP报文格式,能基于Python编写一个简单的SMTP客户端程序。 2实验条件 装有python环境的电脑两台 局域网环境 已经正常运行的邮件服务器 3实验报告内容及...

    用Python套接字实现服务器和客户端的一对多通信(简易的聊天程序)

    一旦有客户端连接,服务器就会为每个客户端创建一个新的套接字用于双方的数据交换。 在描述中提到的"一对多"通信意味着服务器可以同时服务于多个客户端。为了实现这一点,我们需要在服务器端使用多线程。当一个...

    Python编写的简单的UDP和TCPSocket连接的客户端-服务器程序

    在给定的文件中,包括了TCP服务器(TCPServer.py)、UDP客户端(UDPClient.py)、UDP服务器(UDPServer.py)和TCP客户端(TCPClient.py),它们分别展示了如何在Python中实现这两种协议的客户端-服务器架构。...

    流式套接字实现简单的客户端服务端通信过程

    流式套接字,也称为TCP(Transmission Control Protocol)套接字,是网络编程中常用的一种数据传输...对于初学者来说,理解TCP套接字的工作原理及其应用是网络编程的基础,也是进一步学习其他网络协议和技术的基石。

    一个关于网络广播的(服务器-客户端模式)小程序.rar_广播_广播服务器

    当客户端连接时,服务器会创建一个新的套接字连接。 2. **广播数据**:服务器接收到广播消息后,通过已建立的连接向所有客户端发送。这通常涉及到遍历客户端连接列表并逐个发送消息。 3. **管理客户端**:服务器需要...

    Python实现简单的TCP套接字通信Demo【内含客户端和服务端,代码完整可直接使用】

    本示例将详细介绍如何使用Python实现一个简单的TCP套接字通信Demo,包括客户端和服务端的代码实现,以及它们如何进行交互。 首先,我们要理解TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信...

    TcpSocket 包含服务器和客户端

    了解TCP套接字的原理并能熟练地在服务器和客户端之间建立连接、交换数据,是成为一名合格的网络程序员的基础。通过实践,开发者可以进一步优化TCP套接字的性能,如使用非阻塞I/O、多线程或异步编程来处理多个并发...

    网络套接字实现服务器返回客户机发送数据

    "网络套接字实现服务器返回客户机发送数据"这个标题涉及到的是客户端-服务器(Client-Server)架构中的数据交互过程。下面将详细阐述网络套接字的工作原理、如何实现服务器响应客户端发送的数据,以及相关的编程知识...

    python+socket(tcp-client,tcp-server) 包含客户端,服务器端详细代码以及说明,可以直接运行

    这个简单的TCP客户端-服务器示例为你提供了一个基础模板,你可以根据需求进行扩展,比如添加错误处理、多线程支持,或者实现更复杂的通信协议。在实际项目中,通常会使用更高层次的库如Twisted或asyncio来简化异步I/...

    Python TCP\IP通信服务器与客户端

    1. **socket模块**:Python的socket库是操作系统提供的网络通信接口的封装,它允许开发者创建和管理网络套接字,用于建立TCP连接。在tsTserv3.py和tsTclnt3.py中,首先需要导入socket模块。 2. **创建服务器**: -...

    TCP套接字, 利用tcp的方式上传文件

    在"利用TCP的方式上传文件"这一场景中,客户端首先需要创建一个TCP套接字,然后通过这个套接字与服务器建立连接。连接建立后,客户端可以将文件按照字节流的形式发送到服务器端。服务器端同样需要一个监听套接字来...

    《计算机 网络》实验一套接字网络编程

    在本实验中,将学习Python中TCP连接的套接字编程的基础知识:如何创建套接字,将其绑定到特定的地址和端口,以及发送和接收HTTP数据包。你还将学习一些HTTP首部格式的基础知识。 你将开发一个处理一个HTTP请求的Web...

    TCP/IP服务器和客户端

    通过阅读和分析这些代码,我们可以学习到如何使用系统提供的socket库函数来创建、连接、读写TCP套接字,以及如何处理并发连接和错误处理。 源代码的学习可以帮助我们理解以下关键概念: 1. socket()函数:创建套接...

    python TCP/IP服务器和客户端交互

    它提供了低级别的网络通信接口,允许程序员创建套接字对象,进而进行网络连接。 2. **TCP协议**:TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。它通过三次握手建立连接,并通过序列号和确认应答机制...

    Python网络编程之TCP套接字简单用法示例

    本文实例讲述了Python网络编程之TCP套接字简单用法。分享给大家供大家参考,具体如下: 上学期学的计算机网络,因为之前还未学习python,而java则一知半解,C写起来又麻烦,所以一直都没有真正实现过TCP套接字编程。...

    完整的套接字数据库客户端

    例如,使用Python的socket库可以创建一个简单的TCP套接字客户端,连接到MySQL服务器,发送SQL查询,并接收返回的结果。 下面是一些可能包含在"完整的套接字数据库客户端"中的关键知识点: 1. **TCP/IP协议栈**:...

    TCP网口套接字聊天程序

    【TCP网口套接字聊天程序】是一种基于TCP协议实现的网络通信应用,它允许两台计算机之间进行类似QQ的实时聊天。在这个程序中,一台计算机作为服务器,提供监听和接收连接的服务,另一台计算机作为客户端,发起连接...

    同步套接字服务器

    同步套接字服务器是一种网络通信模型,主要用于在客户端和服务器之间建立可靠的数据传输连接。它基于TCP/IP协议栈,提供了一种同步的、面向连接的通信方式,确保数据的完整性和顺序性。在这个模型中,服务器端等待...

    TCP协议的套接字编程

    1. 创建套接字:使用socket库创建一个TCP套接字,如`socket.socket(socket.AF_INET, socket.SOCK_STREAM)`。 2. 绑定地址:使用`bind()`方法绑定IP和端口号,让服务端在特定的网络位置等待连接。 3. 监听连接:使用`...

    3_tcp.rar_TCP 套接字_TCP服务_linux聊天TCP

    在Linux环境中实现聊天应用,我们需要利用TCP套接字编写客户端和服务器端的代码。服务器端通常会监听特定的端口,等待客户端的连接。一旦有客户端连接,服务器就会创建一个新的套接字与之通信,接收并处理客户端发送...

Global site tag (gtag.js) - Google Analytics