鱼C论坛

 找回密码
 立即注册
查看: 1884|回复: 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
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-3-7 09:43:56 From FishC Mobile | 显示全部楼层
源码不太清楚
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


  1. import socket
  2. import sys
  3. import threading
  4. import time

  5. class EchoServer():

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

  7.         self.server_host = server_host
  8.         self.server_port = server_port
  9.         self.server_backlog = 1
  10.         self.start()

  11.     def start(self):

  12.         # Initialize server socket on which to listen for connections
  13.         try:
  14.             server_sock = socket.socket(
  15.                     socket.AF_INET, socket.SOCK_STREAM)
  16.             server_sock.bind((self.server_host, self.server_port))
  17.             server_sock.listen(self.server_backlog)
  18.         except OSError as e:
  19.             print ('Unable to open socket: ', e)
  20.             if server_sock:
  21.                 server_sock.close()
  22.             sys.exit(1)

  23.         # Wait for client connection
  24.         while True:

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

  28.             # Create thread to serve client
  29.             thread = threading.Thread(
  30.                     target = self.serve_content,
  31.                     args = (client_conn, client_addr))
  32.             thread.daemon = True
  33.             thread.start()

  34.         server_sock.close()

  35.     def serve_content(self, client_conn, client_addr):

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

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

  40.         # Echo back received data to client
  41.         for i in a:
  42.             bin_data=i
  43.             client_conn.sendall(bin_data.encode())
  44.             print(i)
  45.             time.sleep(1)
  46.             
  47.             
  48.             

  49.         

  50.         # Close connection to client
  51.         client_conn.close()

  52. def main():

  53.     # Echo server socket parameters
  54.     server_host = 'localhost'
  55.     server_port = 50008

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

  60.     # Create EchoServer object
  61.     server = EchoServer(server_host, server_port)

  62.    

  63. if __name__ == '__main__':
  64.     try:
  65.         main()
  66.     except KeyboardInterrupt:
  67.         print("Shutting down")
  68.     except Exception:
  69.         print("Other exception")
复制代码

  1. import socket
  2. import sys
  3. import time

  4. class EchoClient():

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

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

  8.         # Try to connect to echo server
  9.         try:
  10.             server_sock = socket.socket(
  11.                     socket.AF_INET, socket.SOCK_STREAM)
  12.             server_sock.connect((server_host, server_port))
  13.         except OSError as e:
  14.             print ('Unable to connect to socket: ', e)
  15.             if server_sock:
  16.                 server_sock.close()
  17.             sys.exit(1)

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

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

  29.         # Close server socket
  30.         server_sock.close()

  31. def main():

  32.     # Echo server socket parameters
  33.     server_host = 'localhost'
  34.     server_port = 50008

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

  39.     # Create EchoClient object
  40.     client = EchoClient(server_host, server_port)

  41. if __name__ == '__main__':
  42.     main()
复制代码

这是源了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

源码发了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

好的,我等会看看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我搞明白了
line 29
while(server_sock.recv(1024)):
这里会截取一个返回值,然后会跳到下一个,下面再接受返回值就不是第一个了。 我是说怎么隔一个显示一个
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-7 11:28:52 | 显示全部楼层
解决了将帖子设为【已解决吧】
小甲鱼最新课程 -> https://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
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-26 21:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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