python 网络编程笔记-socket

python 提供了对底层网络编程的socket模块,也提供了诸如urllib、httplib、poplib、ftplib等针对特定功能的编程模块。

以下直接贴代码测试socket模式使用:

服务端:Server.py

#-*- coding:gbk -*-
'''
Created on 2013-4-30

@author: herong
'''
import threading
from socket import *
import time
class process(threading.Thread):
    '''处理类'''
    __client = None
    __addr = None
    def __init__(self,client,addr):
        threading.Thread.__init__(self)
        self.__client = client
        self.__addr = addr
        print "客户端%s连接成功!"%(self.__addr[0])
    def run(self ):
        try:
            while True:
                recvData = self.__client.recv(gBufferSize)
                self.__client.send("客户端%s请求[%s]处理.......\n"%(self.__addr[0],recvData))
                print '处理中......'
                time.sleep(1)
                print '处理完毕.'
                self.__client.send("客户端%s请求[%s]处理完毕!\n"%(self.__addr[0],recvData))
                self.__client.send("[end]\n")
                
                if recvData == "exit":
                    self.__client.send("服务器退出!\n")
                    break
        finally:
            self.__client.close()
            
class Server(threading.Thread):
    '''服务端类'''
    __port = None
    __socket = None
    __active = True
    def __init__(self,port=8001,backlog=10):
        threading.Thread.__init__(self)
        self.__port = port
        self.__socket = socket(AF_INET,SOCK_STREAM)
        self.__socket.bind(("",self.__port))
        self.__socket.listen(backlog)
        print "服务开启,开始接收客户端请求..."
    def run(self):
        try:
            while self.__active:
                client ,addr = self.__socket.accept()
                print "client:%s,addr:%s"%(client,addr)
                p = process(client ,addr)
                p.setDaemon(True)
                p.start()
        finally:
            self.__socket.close()
            
gBufferSize = 1024
            
if __name__ == '__main__':
    Server(8001,5).start()


 

客户端:Client.py

#-*- coding:gbk -*-
'''
Created on 2013-4-30

@author: herong
'''
import threading
import sys
from socket import *

class Client(threading.Thread):
    '''客户端类'''
    __port = None
    __socket = None
    __host = None
    __active = True
    def __init__(self,host,port=8001):
        threading.Thread.__init__(self)
        self.__port = port
        self.__host = host
        self.__socket = socket(AF_INET,SOCK_STREAM)
        self.__socket.connect((self.__host,self.__port))
        print "成功连接服务端%s,端口:%s"%(self.__host,self.__port)
        
    def run(self):
        try:
            while self.__active:
                cmd = raw_input("请输入请求服务端指令:")
                self.__socket.send(cmd)
                
                while 1:
                    recvData = self.__socket.recv(gBufferSize)
                    print "服务端返回信息:%s"%(recvData)
                    if cmd == "exit":
                        sys.exit(0)
                    if '[end]'   in recvData:
                        break
        finally:
            self.__socket.close()
           
            
gBufferSize = 1024
            
if __name__ == '__main__':
    Client("127.0.0.1",8001).start()

 

客户端输出:

成功连接服务端127.0.0.1,端口:8001
请输入请求服务端指令:cmd
服务端返回信息:客户端127.0.0.1请求[cmd]处理.......

服务端返回信息:客户端127.0.0.1请求[cmd]处理完毕!

服务端返回信息:[end]

请输入请求服务端指令:

 

服务端输出:

服务开启,开始接收客户端请求...
client:<socket._socketobject object at 0x0000000002567AD8>,addr:('127.0.0.1', 26097)
客户端127.0.0.1连接成功!
处理中......
处理完毕.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值