鱼C论坛

 找回密码
 立即注册
查看: 1522|回复: 7

[已解决]求大佬帮忙看一下socket问题

[复制链接]
发表于 2021-3-7 05:56:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我想的是,服务器会一个个的把表里的字母传送回客户端,然后客户端会依次把字母打印出来,但是图里的这个可以看到,当服务器传回字母a的时候,客户端并没有收到并打印出来。 不知道是为什么
最佳答案
2021-3-7 10:22:21
wheat1 发表于 2021-3-7 10:21
源码发了

好的,我等会看看
question1.JPG
question2.JPG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-7 09:43:56 From FishC Mobile | 显示全部楼层
源码不太清楚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-7 10:12:45 | 显示全部楼层
import socket
import sys
import threading
import time

class EchoServer():

    def __init__(self, server_host, server_port):

        self.server_host = server_host
        self.server_port = server_port
        self.server_backlog = 1
        self.start()

    def start(self):

        # Initialize server socket on which to listen for connections
        try:
            server_sock = socket.socket(
                    socket.AF_INET, socket.SOCK_STREAM)
            server_sock.bind((self.server_host, self.server_port))
            server_sock.listen(self.server_backlog)
        except OSError as e:
            print ('Unable to open socket: ', e)
            if server_sock:
                server_sock.close()
            sys.exit(1)

        # Wait for client connection
        while True:

            # Client has connected
            [client_conn, client_addr] = server_sock.accept()
            print ('Client has connected with address: ', client_addr)

            # Create thread to serve client
            thread = threading.Thread(
                    target = self.serve_content,
                    args = (client_conn, client_addr))
            thread.daemon = True
            thread.start()

        server_sock.close()

    def serve_content(self, client_conn, client_addr):

        a=['a','b','c','d','e','f','g','h','i']
        print ('Serving content to client with address', client_addr)

        # Receive data from client
        bin_data = client_conn.recv(1024)

        # Echo back received data to client
        for i in a:
            bin_data=i
            client_conn.sendall(bin_data.encode())
            print(i)
            time.sleep(1)
            
            
            

        

        # Close connection to client
        client_conn.close()

def main():

    # Echo server socket parameters
    server_host = 'localhost'
    server_port = 50008

    # Parse command line parameters if any
    if len(sys.argv) > 1:
        server_host = sys.argv[1]
        server_port = int(sys.argv[2])

    # Create EchoServer object
    server = EchoServer(server_host, server_port)

    

if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        print("Shutting down")
    except Exception:
        print("Other exception")
import socket
import sys
import time

class EchoClient():

    def __init__(self, server_host, server_port):
        self.start(server_host, server_port)

    def start(self, server_host, server_port):

        # Try to connect to echo server
        try:
            server_sock = socket.socket(
                    socket.AF_INET, socket.SOCK_STREAM)
            server_sock.connect((server_host, server_port))
        except OSError as e:
            print ('Unable to connect to socket: ', e)
            if server_sock:
                server_sock.close()
            sys.exit(1)

        # Send message string to server over socket
        str_msg = input("Please enter the words you want to search Like(a?t):")
        bin_msg = str_msg.encode('utf-8')
        server_sock.sendall(bin_msg)

        # Get response data from server and print it
        while(server_sock.recv(1024)):
            bin_resp = server_sock.recv(1024)
            str_resp = bin_resp.decode('utf-8')
            print ('Client received', str_resp)
           
            

        # Close server socket
        server_sock.close()

def main():

    # Echo server socket parameters
    server_host = 'localhost'
    server_port = 50008

    # Parse command line parameters if any
    if len(sys.argv) > 1:
        server_host = sys.argv[1]
        server_port = int(sys.argv[2])

    # Create EchoClient object
    client = EchoClient(server_host, server_port)

if __name__ == '__main__':
    main()
这是源了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-7 10:21:42 | 显示全部楼层

源码发了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-7 10:22:21 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
wheat1 发表于 2021-3-7 10:21
源码发了

好的,我等会看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-7 11:20:36 | 显示全部楼层

我搞明白了
line 29
while(server_sock.recv(1024)):
这里会截取一个返回值,然后会跳到下一个,下面再接受返回值就不是第一个了。 我是说怎么隔一个显示一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-7 11:28:52 | 显示全部楼层
解决了将帖子设为【已解决吧】
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-7 21:19:12 From FishC Mobile | 显示全部楼层
wheat1 发表于 2021-3-7 11:20
我搞明白了
line 29
while(server_sock.recv(1024)):

en
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 08:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表