Python Socket 编程

client:

 

import socket, sys
if __name__ == '__main__':
    #处理参数
    argv = sys.argv
    if (len(argv)!=3) or (len(argv)==2 and argv[1]=='/?'):
        print '>>>Useage:', argv[0], '<address> <port>'
        sys.exit(0)

    HOST = argv[1]          #Server IP地址
    PORT = int(argv[2])     #Server 端口
    print '>>>HOST:', HOST
    print '>>>PORT:', PORT

    #打开socket
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    except socket.error:
        print '>>>Fail to open socket!'
        sys.exit(1)

    print '>>>Socket opened...'

    #连接
    try:
        sock.connect((HOST, PORT))
    except socket.error:
        print '>>>Fail to connect!'
        sock.close()
        print '>>>Socket closed...'
        sys.exit(1)

    print '>>>Socket connected...'

    flag = 1            #循环标志
    iReturnValue = 0    #系统返回值

    #向Server发送信息并回显
    while(flag):
        msg = raw_input('>>>Input message: ')
        if msg == '':
            continue
        if msg == 'exit':
            flag = 0

        #发送信息
        try:
            sock.send(msg)
        except socket.error:
            print '>>>Fail to send message!'
            iReturnValue = 1
            break
        print '>>>Message sent    :', msg

        #接收信息
        try:    
            msg = sock.recv(1024)
        except socket.error:
            print '>>>Fail to receive message!'
            iReturnValue = 1
            break

        print '>>>Message received:', msg

    #关闭socket,退出程序
    sock.close()
    print '>>>Socket closed...'
    print 'Exit client program.'
    sys.exit(iReturnValue)

server:

 

import socket, threading
import sys, copy, time
iClientCount = 0 #客户端连接数

def ConnectThread(conn, addr):

    """

    Function called by thread to deal with client connection

    """

    global iClientCount         #引用全局变量
    sock = copy.copy(conn)      
    address = copy.copy(addr)
    flag = 1
    while(flag):
        try:
            msg = sock.recv(1024)
        except socket.error:
            print '>>>A 'receive' error happened! IP:', address[0],
'PORT:', address[1]
            break

        if str(msg) == 'exit': 
            msg = 'byebye'
            flag = 0
        try:
            sock.send(msg)
        except socket.error:
            print '>>>A 'send' error happened! IP:', address[0], 'PORT:',
address[1]
            break
    iClientCount -= 1
    print '>>>Disconnected with', address[0], 'at port', address[1] 
    print '>>>Total number of connections is', iClientCount
    sock.close()

def ListenThread(sock):

    """

    Function called by thread to listen a connection

    """

    global iClientCount
    while 1:
        if iClientCount >= MAX_CLIENTS:
            time.sleep(5)
            continue

        try:
            conn, addr = sock.accept()
        except socket.error:
            print '>>>An 'accept' error happened!'
            continue

        iClientCount += 1
        print '>>>Connecting from', addr[0], 'at port', addr[1]
        print '>>>Total number of connections is', iClientCount
        threading.Thread(target=ConnectThread, args=(conn, addr)).start()

if __name__ == '__main__':
    argv = sys.argv
    if (len(argv)>3) or (len(argv)==2 and argv[1]=='/?'):
        print '>>>Useage:', argv[0], '[port=<port>]
[max=<max_clients>]'
        sys.exit(0)

    HOST = ''
    PORT = 8006
    MAX_CLIENTS = 5

    for arg in argv[1:]:
        if arg.startwith('port='):
            PORT = int(arg[len('port='):])
        elif arg.startwith('max='):
            MAX_CLIENTS = int(arg[len('max='):])

    print '>>>PORT:', PORT
    print '>>>MAX_CLIENTS:', MAX_CLIENTS

    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    except socket.error:
        print 'Fail to open socket!'
        sys.exit(1)

    print '>>>Socket opened...'


    try:
        sock.bind((HOST, PORT))
    except socket.error:
        print 'Fail to bind port!'
        sock.close()
        sys.exit(1)

    print '>>>Socket binding...'

    try:
        sock.listen(MAX_CLIENTS)
    except socket.error:
        print 'Fail to listen!'
        sock.close()
        sys.exit(1)

    print '>>>Socket listening...'
    threading.Thread(target=ListenThread, args=(sock,)).start()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值