python socket 实现简单client与server

使用SocketServer创建一个网络服务程序,并且是多线程的,只需要几个简单的步骤:

(1)、创建处理request的类,创建方法为:继承BaseRequestHandler类,并重载handle()方法。该方法将被回调用做处理当前接收到的request。

注意:一般的做法是直接继承StreamRequestHandler或者DatagramRequestHandler。比如:

class MyTCPHandler(SocketServer.StreamRequestHandler):

(2)、实例化一个server基类(比如TCPServer)的对象,并发服务器地址和处理request的类作为参数传入。

(3)、使用server基类对象调用handle_request()或serve_forever()方法,即可处理一个或多个request。

参考alex教程上的,服务器端多线程方式监听,接收从客户端发送过来的命令cmd,执行cmd之后,将结果返回给客户端看。代码如下:

服务端代码,multithread_server.py:

 1 import SocketServer
 2 import commands,time
 3 class MyTCPHandler(SocketServer.BaseRequestHandler):
 4     def handle(self):
 5         while True:
 6             print "Got a new connection from ",self.client_address
 7             cmd = self.request.recv(1024)
 8             if not cmd:
 9                 print "Lost connection with",self.client_address
10                 break
11             print ‘recv:‘,cmd
12
13             #commands.getstatusoutput execute cmd from client
14
15             cmd_result = commands.getstatusoutput(cmd)
16
17
18             #服务器发送的结果的长度
19             self.request.send(str(len(cmd_result[1])))  #cmd_result[0] result status, cmd_result[1] result content
20
21             #为防止粘包现象,sleep一下
22             time.sleep(0.2)
23
24             #服务器发送结果的内容
25             self.request.sendall(cmd_result[1])
26
27 if __name__ == "__main__":
28     HOST,PORT = "localhost",999
29
30     server = SocketServer.ThreadingTCPServer((HOST,PORT),MyTCPHandler)
31     server.serve_forever()
32     

客户端代码client.py

 1 import socket
 2 sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
 3 sock.connect((‘localhost‘,999))
 4
 5 def recv_all(obj,msg_length):
 6     raw_result = ‘‘
 7     while True:
 8         if msg_length <=4096:
 9             #data = once received
10             data = obj.recv(msg_length)
11             raw_result += data
12             break
13         else:
14             data = obj.recv(4096)
15             raw_result += data
16             msg_length = msg_length - 4096
17
18     return raw_result
19
20
21 while True:
22     user_input = raw_input("msg to send:").strip()
23
24     sock.send(user_input)
25
26     #res_size :接收到的结果长度
27     res_size = int(sock.recv(1024))
28
29     print ‘received data size: ‘,res_size
30
31     #recv_all(sock,res_size): 接收到的结果内容
32     print "received data::",recv_all(sock,res_size)
33
34 sock.close()
时间: 2024-10-11 01:34:52

python socket 实现简单client与server的相关文章

python socket编程入门(编写server实例)+send 与sendall的区别与使用方法

python 编写server的步骤: 1. 第一步是创建socket对象.调用socket构造函数.如: socket = socket.socket( family, type ) family参数代表地址家族,可为AF_INET或AF_UNIX.AF_INET家族包括Internet地址,AF_UNIX家族用于同一台机器上的进程间通信. type参数代表套接字类型,可为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字). 2. 第二步是将socket绑定到指定地址.这

Python Socket实现简单的聊天室

通过参考其他牛人的文章和代码,  再根据自己的理解总结得出,  说明已经加在注释中, FYI 主要参考文章: http://blog.csdn.net/dk_zhe/article/details/37820965  http://www.cnblogs.com/coser/archive/2012/01/06/2315216.html  https://docs.python.org/2.7/library/select.html?highlight=select#module-select

Python socket通信~简单实例

socket编程步骤 服务端创建一个socket,绑定地址和端口,然后监听端口上传入的连接,一旦有连接进来,就通过accept函数接收传入的连接. 客户端也是创建一个socket.绑定远程地址和端口,然后建立连接,发送数据. family 地址簇,用与socket()函数的第一个参数.主要有以下几个 socket.AF_UNIX 用与单一机器下的进程通信 socket.AF_INET 用与服务器之间相互通信,通常都用这个. socket.AF_INET6 支持IPv6 sockettype so

python socket编程入门(编写server实例)-乾颐堂

python 编写server的步骤: 1. 第一步是创建socket对象.调用socket构造函数.如: socket = socket.socket( family, type ) family参数代表地址家族,可为AF_INET或AF_UNIX.AF_INET家族包括Internet地址,AF_UNIX家族用于同一台机器上的进程间通信. type参数代表套接字类型,可为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字). 2. 第二步是将socket绑定到指定地址.这

socket编写简单回显server

socket在公司代码中应用比较广,比如接口调用的IPCRPC机制,经常看到这样的代码,但是一直也没有动手写过. 在某个比较大的进程中创建一个子进程,由于父子进程复制会浪费内存,可以将创建进程的命令通过socket发送到另一个轻量级的进程来创建. 在lighttpd和airplay的源码中,socket的框架是类似的. 下面参照lighttpd和airplay写个简单的回显server,以后有空再完善. server.c #include <stdio.h>#include <strin

windows下socket编程实现client和server双向通信

服务端代码server.c // server.cpp : Defines the entry point for the console application. // #include <stdio.h> #include <Winsock2.h> //Socket的函数调用 #include <windows.h> #define BUF_SIZE 6400 // 缓冲区大小 #pragma comment (lib, "ws2_32") //

python socket编程 TCP

python socket编程 TCP by wuxy server.py import socket import commands BUF_SIZE = 1024 server_addr = ('127.0.0.1',8888) server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind(se

使用Python创建一个简易的Web Server

Python 2.x中自带了SimpleHTTPServer模块,到Python3.x中,该模块被合并到了http.server模块中.使用该模块,可以快速创建一个简易的Web服务器. 我们在C:\Users\%USERNAME%\用户目录下,创建一个html目录,将html/jpg等网页文件拷贝到该目录下,启动一个cmd命令行窗口,进入html目录,执行如下命令即可创建一个简易的Web Server: python -m http.server 8888 图01-使用python创建一个简单的

Python Socket Client及Server简单编程

本文主要介绍使用Python语言编写Socket协议Server及Client的简单实现方法. 1. Python Socket编程简介 Socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 三种流行的套接字类型是:stream,datagram和raw.stream和datagram套接字可以直接与TCP协议进行接口,而raw套接字则接口到IP协议. Python Socket模块提供了对低层BSD套接字样式网络的访问,使用