Python:套接字 - 从同一台PC运行服务器和客户端

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python:套接字 - 从同一台PC运行服务器和客户端相关的知识,希望对你有一定的参考价值。

Hy,我刚刚转发了我的端口和我的Python服务器<--->当从另一台PC运行客户端时,客户端聊天按预期工作。

当我尝试从我自己的PC(服务器文件本身所在的位置)连接客户端时,我得到他的错误:

OSError: [WinError 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted

Q1:这意味着只有1个应用可以连接到特定端口,对吗?

Q2:如何在同一台PC上同时开发我的服务器和客户端? (我没有任何其他PC可以做到)

如果需要,这是我的代码。 (我刚开始,所以不要判断)

服务器:

from tkinter import *
#from mysql.connector import (connection)
import socket
from _thread import *

import sys
root = Tk()
T = Text(root, height=2, width=30)
T2 = Text(root, height=2, width=30)
B = Button(root, text="Send")
T.pack(side=LEFT,fill=X)
T2.pack(side=TOP,fill=X)
B.pack(side=LEFT,fill=X)




#statick ip
host = 'x.x.x.x'
port=yyyy
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host,port))

try:
    s.bind((host,port))
except socket.error as e:
    print(str(e))

s.listen(5)
print("waiting for connection")
def threaded_client(conn):
    conn.send(str.encode("Connection with the server established
"))

while True:
    data = conn.recv(2048)
    reply = "You: " + data.decode('utf-8')
    if not data:
        break
    conn.sendall(str.encode(reply))
conn.close()

while True:
    conn, addr = s.accept()
    print('connected to: '+ addr[0]+':'+str(addr[1]))
    start_new_thread(threaded_client,(conn,))
root.mainloop()

客户端:

from tkinter import *
import socket

print("everything is imported")

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print("socket is established")
#the public ip
host = 'y.y.y.y'
port=xxxx
s.connect((host,port))

print("s.connect done")

def sendShit(event):
    textToSend = T.get("1.0",END)
    s.send(str.encode(textToSend))
    T2.insert(END, s.recv(1024))

print("sendshit defined")

root = Tk()
T = Text(root, height=2, width=30)
T2 = Text(root, height=2, width=30)
B = Button(root, text="Send")
T.pack(side=LEFT,fill=X)
T2.pack(side=TOP,fill=X)
B.pack(side=LEFT,fill=X)
T.insert(END, "Type here")
T2.insert(END, s.recv(1024))
B.bind("<Button-1>",sendShit)
mainloop()
答案

在这两个文件中,只需将host设置为localhost127.0.0.1,并将port设置为两个文件中的相同端口号。例如'6000`

另一答案

关闭服务器的所有打开连接。有时您不小心让服务器运行。如果要获取计算机的主机IP地址,可以使用host = socket.gethostbyname(socket.gethostname())。保持服务器和客户端上的端口号相同。

以上是关于Python:套接字 - 从同一台PC运行服务器和客户端的主要内容,如果未能解决你的问题,请参考以下文章

无法在java中的2台PC套接字之间将客户端连接到服务器

为什么使用同一台PC时“hostname -I”的输出会发生变化?

RPC over TCP 与同一台机器上的多个客户端

同一台PC机同时运行两个django项目的认证登录问题

客户端只能在同一台计算机上连接到服务器

python成长之路第九篇:网络编程