Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1858038
  • 博文数量: 473
  • 博客积分: 13997
  • 博客等级: 上将
  • 技术积分: 5953
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-22 11:52
文章分类

全部博文(473)

文章存档

2014年(8)

2013年(38)

2012年(95)

2011年(181)

2010年(151)

分类: LINUX

2012-10-12 17:05:42

import sys
import socket
import time
import threading

start_time = time.time()

class mythread(threading.Thread):
    def __init__(self,threadname):
        threading.Thread.__init__(self)
        self._run_num = num

    def run(self):
        global count, mutex
        threadname = threading.currentThread().getName()

        for i in range(int(self._run_num)):
            #get lock
            mutex.acquire()
            count = count + 1
            #release lock
            mutex.release()

            mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            mysock.connect(('221.11.6.88',10020))
            mysock.send('**0#PM#0#0#0#468af015-30b1-4f4a-bce8-ebbfe2c914ce')
            rdata = mysock.recv(50)
            print  i, 'received:', rdata
            mysock.close()

if __name__ == "__main__":
    global count, mutex
    threads = []
    num = 5
    count = 1
    #create lock
    mutex = threading.Lock()
    for x in range(0, num):
        threads.append(mythread(5))
    for t in threads:
        t.start()
    for t in threads:
        t.join()

print "Elapsed Time: %s" % (time.time() - start_time)

########################################################################

最近在学python的socket编程,在网上发现了一个很好的例子程序,是一个印度人写的吧,于是在两台机器上测试了一下,很好用(稍稍作了修改)。可以用于公司内两人聊天之用,比msn聊天低调多了,不容易被老板发现哈。有兴趣的试试哦~

#server

import socket

import threading

import time

SIZE = 4

host = ''

soc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

soc.bind((host,5432))

soc.listen(5)

class CThread(threading.Thread):

    def __init__(self,c):

        threading.Thread.__init__(self)

        self.conn = c

        self.stopIt=False

    def mrecv(self):

        data = self.conn.recv(SIZE)

        self.conn.send('OK')

        msg = self.conn.recv(int(data))

        return msg

    def run(self):

        while not self.stopIt:

        msg = self.mrecv()

        print 'recieved-> ',msg

    def setConn(con1,con2):

        dict={}

        state = con1.recv(9)

        con2.recv(9)

        if state =='WILL RECV':

            dict['send'] = con1 # server will send data to reciever

            dict['recv'] = con2

        else:

            dict['recv'] = con1 # server will recieve data from sender

            dict['send'] = con2

        return dict

    def msend(conn,msg):

        if len(msg)<=999 and len(msg)>0:

            conn.send(str(len(msg)))

        if conn.recv(2) == 'OK':

            conn.send(msg)

        else:

            conn.send(str(999))

        if conn.recv(2) == 'OK':

            conn.send(msg[:999])

        msend(conn,msg[1000:]) # calling recursive

        (c1,a1) = soc.accept()

        (c2,a2) = soc.accept()

        dict = setConn(c1,c2)

        thr = CThread(dict['recv'])

        thr.start()

        try:

            while 1:

                msend(dict['send'],raw_input())

        except:

            print 'closing'

        thr.stopIt=True

        msend(dict['send'],'bye!!!')# for stoping the thread

        thr.conn.close()

        soc.close()

#client

import socket

import threading

SIZE =4

host = 'elwin2' #server name

class client(threading.Thread):

    def __init__(self,c):

        threading.Thread.__init__(self)

        self.conn = c

        self.stopIt = False

    def mrecv(self):

        data = self.conn.recv(SIZE)

        self.conn.send('OK')

        return self.conn.recv(int(data))

    def run(self):

        while not self.stopIt:

            msg = self.mrecv()

        print 'recieved-> ',msg

        soc1 = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

        soc1.connect((host,5432))

        soc1.send('WILL SEND') # telling server we will send data from here

        soc2 = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

        soc2.connect((host,5432))

        soc2.send('WILL RECV') # telling server we will recieve data from here

    def msend(conn,msg):

        if len(msg)<=999 and len(msg)>0:

            conn.send(str(len(msg)))

        if conn.recv(2) == 'OK':

           conn.send(msg)

        else:

           conn.send(str(999))

        if conn.recv(2) == 'OK':

            conn.send(msg[:999])

        msend(conn,msg[1000:]) # calling recursive

        thr = client(soc2)

        thr.start()

        try:

        while 1:

            msend(soc1,raw_input())

        except:

            print 'closing'

        thr.stopIt=True

        msend(soc1,'bye!!') # for stoping the thread

        thr.conn.close()

        soc1.close()

        soc2.close()

########################################################################
阅读(1081) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~