Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:套接字-从同一台PC上运行服务器和客户端_Python_Sockets_Client_Server - Fatal编程技术网

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

Python:套接字-从同一台PC上运行服务器和客户端,python,sockets,client,server,Python,Sockets,Client,Server,Hy,我刚刚转发了我的端口,我的Python服务器客户端聊天在从不同的PC运行客户端时按预期工作 当我尝试从自己的PC(服务器文件本身所在的位置)连接客户端时,我收到了他的错误: OSError: [WinError 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted 问题1:这意味着只有一个应用程序可以连接到特定端口,对吗 问题2:那么,我如何在同

Hy,我刚刚转发了我的端口,我的Python服务器客户端聊天在从不同的PC运行客户端时按预期工作

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

OSError: [WinError 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted
问题1:这意味着只有一个应用程序可以连接到特定端口,对吗

问题2:那么,我如何在同一台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\n"))

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()
从tkinter导入*
导入套接字
打印(“所有内容都已导入”)
s=socket.socket(socket.AF\u INET,socket.SOCK\u STREAM)
打印(“已建立套接字”)
#公共知识产权
主机='y.y.y'
端口=xxxx
s、 连接((主机、端口))
打印(“s.connect完成”)
def发送(事件):
textToSend=T.get(“1.0”,结束)
s、 发送(str.encode(textToSend))
T2.插入(结束,s.recv(1024))
打印(“已定义的发送”)
root=Tk()
T=文本(根,高度=2,宽度=30)
T2=文本(根,高度=2,宽度=30)
B=按钮(根,text=“发送”)
T.pack(侧面=左侧,填充=X)
T2.包装(侧面=顶部,填充=X)
B.包装(侧面=左侧,填充=X)
T.插入(结束,“在此处键入”)
T2.插入(结束,s.recv(1024))
B.bind(“,sendShit)
mainloop()

在两个文件中,只需将
主机设置为
localhost
127.0.0.1
,并将
端口设置为两个文件中相同的端口号即可。例如,假设“6000”

关闭服务器的所有打开的连接。有时您会意外地使服务器处于运行状态。如果要获取计算机的主机IP地址,可以使用
HOST=socket.gethostbyname(socket.gethostname())
。保持端口号在服务器和客户机上都是相同的。< /P>只在两个文件上设置“代码>主机=‘127.0.0.1’< /代码>(这是您的<代码>本地主机< /代码>,并设置<代码>端口< /代码>为相同的编号(例如6000),我已将其作为回答…请考虑接受它,如果您看到它对您有帮助的话。谢谢。