在阅读这篇文章之前,默认您已经学会了Python基本知识,废话不多说,自己写了一个小程序,直接上原理图和代码,希望各位网友多多指正。
1:目的
利用socket编写客户端和服务器代码,实现多个客户端能够正常访问服务器,能够处理信息和访问Html静态网页
1:基础知识
1970SocketUNIXTCP/IP。
APITCP/IP就是
2:基础调用
Socket
Socket
IP
listen()
UDP
UDP
3:Socket编程原理
4:服务器程序和客户端程序
#coding=utf-8 from multiprocessing import Process #导入Python自带库的Process模块 import SimpleHTTPServer #导入Http请求模块 import SocketServer #导入SockrtServer,该模块封装了Socketde 部分功能 from socket import * #导入Sockret中的所有内容 from threading import Thread #导入线程 (4)处理HTTP请求模块 HOST = ("192.168.50.92") #服务器地址 PORT = 7782 #端口号 处理HTTP请求模块 def handleHttp(): #定义函数处理HTTP请求模块 Handler = SimpleHTTPServer.SimpleHTTPRequestHandler httpd = SocketServer.TCPServer((HOST, PORT), Handler,) print "--进程2--等待处理http请求--服务已开启在", PORT,"端口" httpd.serve_forever() (5) Socket基础配置,包括创建Socket,绑定主机地址,建立侦听状态 serSocket = socket(AF_INET,SOCK_STREAM) #socket基础配置模块 serSocket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) addr=("",7788) serSocket.bind((addr)) serSocket.listen(100) sockets = [] (6)监听客户端请求模块,利用While循环监听客户端请求 def process_1(): #监听请求模块 global addr #定义全局变量 print("--进程1--,--等待新客户端连接--") print('waiting for connecting...') while True: clientSock, addr = serSocket.accept() print('connected from:%s'%str(addr)) print("成功连接") clientSock.setblocking(0) sockets.append(clientSock) (7)处理Client端请求模块 def handleClient(): while True: for newSocket in sockets: try: recvData = newSocket.recv(1024) print("----线程处理请求中---") if len(recvData) > 0: print "recv info form client%s:%s" %(str(addr) ,str(recvData)) sendData = (recvData) # 向客户端发送收到的数据 newSocket.send(sendData) # 发送的数据 else: return "%s客户端已经关闭" % str(addr) except Exception as e: continue if __name__ == '__main__': #主函数 P1 = Process(target=handleHttp) P1.start() client = Thread(target=handleClient,) client.start() process_1()客户端程序:
#coding=utf-8 from socket import * #导入socket模块 tcpClientSocket = socket(AF_INET,SOCK_STREAM) #创建套接字,指明socket的类型是TCP套接字 IP=("192.168.50.131") #目标主机 Port=7788 #端口号 InfoLen = 1024 #传输的最大长度 tcpClientSocket.connect((IP,Port)) #绑定IP和端口,进行数据传输 tcpClientSocket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) def send_request(): while True: print("---已连接服务器,发送数据中---") try: sendData = raw_input("客户端:") if len(sendData)>0: #判断发送数据的长度,长度大于零,将要发送的数据进行编码 tcpClientSocket.send(str(sendData)) #向Server端发送数据 else: print("您发送的是空数据") continue recvData = tcpClientSocket.recv(infoLen) #接收从Server端返回的数据 print"收到服务器数据:%s"% (str(recvData)) except Exception as error: print(error) print("---请求连接服务器---") if __name__ == '__main__': send_request()
5:测试
将该程序在Linux上运行测试UbuntuIPifconfigIPIP为192.168.50.131
首先运行服务器程序。
WindowsPycharm。
HTTP192.168.131:7782
6:小结
文章来源: Python网络编程利用Socket实现多请求