Discuss / Python / 20180608

20180608

Topic source

Gday小海狮

#1 Created at ... [Delete] [Delete and Lock User]

client.py如下: import socket s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(('127.0.0.1',9999)) print(s.recv(1024).decode('utf-8')) for data in [b'Michael',b'Tracy',b'Sarah']: s.send(data) print(s.recv(1024).decode('utf-8')) s.send(b'exit') s.close()

server.py如下: import socket,threading,time s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind(('127.0.0.1',9999)) s.listen(5) print('Waiting for connection...')

def tcplink(sock,addr): print('Accept new connection from %s:%s' % addr) sock.send(b'Welcome!') while True: data = sock.recv(1024) time.sleep(1) if not data or data.decode('utf-8') == 'exit': break sock.send(('Hello, %s!' % data.decode('utf-8')).encode('utf-8')) sock.close() print('Connection from %s : %s closed.' % addr) while True: sock, addr = s.accept() t = threading.Thread(target=tcplink, args=(sock,addr)) t.start()

遇到的问题和解决办法如下: 1.问题: (base) c:\work>python server.py Waiting for connection... Traceback (most recent call last): File "server.py", line 8, in <module> t = threading.Thread(target=tcplink, args=(sock,addr)) NameError: name 'threading' is not defined 办法:import threading

  1. 问题:(base) c:\work>python server.py Waiting for connection... Traceback (most recent call last): File "server.py", line 8, in <module> t = threading.Thread(target=tcplink, args=(sock,addr)) NameError: name 'tcplink' is not defined 办法:把定义的tcplink方法放在while前面

  2. 问题: (base) c:\work>python server.py Waiting for connection... Accept new connection from 127.0.0.1:56097 Exception in thread Thread-1: Traceback (most recent call last): File "C:\ProgramData\Anaconda3\lib\threading.py", line 916, in _bootstrap_inner self.run() File "C:\ProgramData\Anaconda3\lib\threading.py", line 864, in run self._target(self._args, *self._kwargs) File "server.py", line 11, in tcplink time.sleep(1) NameError: name 'time' is not defined 办法:import time

Gday小海狮

#2 Created at ... [Delete] [Delete and Lock User]

还有个问题想问一下,正确运行后server无法用Ctrl+C退出。这是什么原因啊

失控了呢

#3 Created at ... [Delete] [Delete and Lock User]

因为主程序产生新线程之后又进入了while循环,运行到sock.accept()后没有收到新的请求就进入阻塞状态,一直等待新的连接请求到来,所以程序无法响应Ctrl+C

[root@instance-b3p58gb0 helloworld]# /usr/bin/python Server.py Waiting for conection... Accept new connection from x.x.x.x:14507... Connection from x.x.x.x:14507 closed. Exception in thread Thread-1: Traceback (most recent call last): File "/usr/local/python36/lib/python3.6/threading.py", line 916, in _bootstrap_inner self.run() File "/usr/local/python36/lib/python3.6/threading.py", line 864, in run self._target(self._args, *self._kwargs) File "Server.py", line 14, in tcplink data = sock.recv(1024) OSError: [Errno 9] Bad file descriptor

请问错误堆栈这个样子,是哪里问题,百度没搜出来,请大佬答疑解惑。


  • 1

Reply