在python中从客户端发送数据到服务器

时间:2014-01-25 20:59:07

标签: python sockets

import socket
import os
import msvcrt
import time

def timeInput(text="",e="",timeFin=0.01):
    result=[]
    done=time.time() +timeFin
    print(text,end=e)
    while 1:
        if msvcrt.kbhit():
            echo=msvcrt.getch().decode('ASCII')
            result.append(echo)
            time.sleep(0.1)
        else:
            if time.time() > done:
                st=""
                for i in result:
                    st=st+str(i)
                st=st.replace("`b","")
                return st



#username=("Username? ")

#x, y, width, height, username, map position, list position

try:
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect(('10.0.0.7', 25565))
    while 1:
        #data = client_socket.recv(512)
        #key=timeInput()

        #code="player,100,200,30,30,player2,0,1"
        code="chat,hi,Marc"
        client_socket.send(bytes(code,"UTF-8"))

except Exception as e:
    print("ERROR: "+str(e))

由于某些原因,当我尝试在python中连接到我的服务器时,它正确连接但不会连续发送chat,hi,Marc到服务器。我不知道为什么这不起作用,提前谢谢!

1 个答案:

答案 0 :(得分:0)

socket.send()不保证所有字节都已发送(或者更好地说,所有字节都已复制到传出缓冲区)。发送()块直到至少可以发送一个字符。

你可能因为循环而快速填充out缓冲区,然后添加消息的某些部分,然后阻塞直到释放一些缓冲区空间。

因此,您需要阅读send()的结果。如果是> 0,这是你发送的字节数,所以你必须再次发送()剩下的部分。如果send()返回< = 0,则关闭连接,您应该退出循环。