0
点赞
收藏
分享

微信扫一扫

Python基础14 socket示例


Python基础14 socket示例

  • ​​一、服务端​​
  • ​​二、客户端​​

一、服务端

#coding:utf-8
# -*- coding: utf-8 -*-

import socket
import threading
import binascii

BUFSIZE = 1024
def handle(connected_sock):
while True:
data = connected_sock.recv(BUFSIZE)
if len(data) >0:
print 'receive:',data
print 'hex:',binascii.b2a_hex(data) #字符串以16进制形式打印
cur_thread = threading.current_thread()
send_data = '{}:{}'.format(cur_thread.ident,data)
connected_sock.sendall(send_data)
print 'send:',send_data
else:
print 'close the connected socket and terminate sub thread'
connected_sock.close()
break


HOST = ''
PORT = 8002
ADDR = (HOST,PORT)
sub_threads = []

listen_sock = socket.socket()
listen_sock.settimeout(5.0)
listen_sock.bind(ADDR)
listen_sock.listen(2)
print 'build connect when new TCP comes'

while True:
try:
connected_sock,client_addr = listen_sock.accept()
except socket.timeout:
length = len(sub_threads)
while length:
sub = sub_threads.pop(0)
sub_id = sub.ident
sub.join(0.1)
if sub.isAlive():
sub_threads.append(sub)
else:
print 'killed sub thread ',sub_id
length -=1
else:
t = threading.Thread(target=handle,name='sub thread',args=(connected_sock,))

connected_sock.setblocking(1)
t.start()
sub_threads.append(t)

二、客户端

from socket import *


PORT=8002
HOST='127.0.0.1'

clientsocket = socket(AF_INET,SOCK_STREAM)
clientsocket.connect((HOST,PORT))
clientsocket.send(b'hello')
data = clientsocket.recv(1024)
print data


举报

相关推荐

0 条评论