Python网络编程利用Socket实现多请求

匿名 (未验证) 提交于 2019-12-02 22:54:36

在阅读这篇文章之前,默认您已经学会了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上运行测试UbuntuIPifconfigIPIP192.168.50.131

首先运行服务器程序。

WindowsPycharm



HTTP192.168.131:7782




6:小结


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!