简体   繁体   English

Python Simple Sever和客户端脚本(套接字编程)

[英]Python Simple Sever and Client script (Socket programming)

My objective is every time the client send the data to the server, the server will display it. 我的目标是每次客户端将数据发送到服务器时,服务器都会显示它。 But Currently when the client send the data, the server capture the data and display it only for the first time. 但是当前,当客户端发送数据时,服务器捕获数据并仅在第一次显示它。 What is causing the problem? 是什么原因引起的? Btw, this is my first time doing network programming, so pls keep your answer simple. 顺便说一句,这是我第一次进行网络编程,因此请简单回答。

Server Script 服务器脚本

import socket

server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.bine(("",5001))
server_socket.listen(5)

print "TCP Server Waiting for incoming client connection on port 5001..."

while True:
    client_socket, address =server_socket.accept()
    print "Connection from ", address
    data = client_socket.recv(512)
    print "RECIEVED:" , data

Client Script 客户端脚本

import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('169.254.0.1', 5001))
data=''
while data!='quit':
        data = raw_input ( "SEND :" )
        client_socket.send(data)

Your server code receive only once, then accept another client. 您的服务器代码仅接收一次,然后接受另一个客户端。 You should loop until client disconnect. 您应该循环播放直到客户端断开连接。 (when disconnected, recv() return empty string) (断开连接时, recv()返回空字符串)

while True:
    client_socket, address = server_socket.accept()
    print "Connection from ", address
    while 1:
        data = client_socket.recv(512)
        if not data:
            break
        print "RECIEVED:" , data

BTW, your server code (and my code) does handle only one client at a time. 顺便说一句,您的服务器代码(和我的代码)一次只处理一个客户端。

while True:
    client_socket, address =server_socket.accept()
    print "Connection from ", address
    data = client_socket.recv(512)
    print "RECIEVED:" , data

This should be: 应该是:

client_socket, address =server_socket.accept()
print "Connection from ", address
while True:
    data = client_socket.recv(512)
    print "RECIEVED:" , data

server_socket.accept() will wait indefinitely until a new client is connected. server_socket.accept()将无限期等待,直到连接了新客户端。 Actually your loop is like : "accept a client and receive one time the data he sent". 实际上,您的循环就像:“接受客户端并接收他发送的数据一次”。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM