[英]socket in python
我试图做客户端和服务器,看看我在做什么
#Server
import socket
Host=''
Port=305
OK=socket.socket()
OK.bind((Host,Port))
OK.listn(1)
OK.accept()
另一个给客户
#Client
impot socket
Host='192.168.1.4'
Port=305
OK=socket.socket()
OK.connect((Host,Port))
第一件事:现在一切正常,但是我希望客户端连接到服务器时:服务器在客户端屏幕上打印“ Hello Admin”
第二件事:我想像输入命令一样! 喜欢
COM=raw_input('enter you command system:')
然后客户端输入dir
例如,然后服务器在客户端屏幕上打印结果
看这里,这是一个用Python编写的简单回显服务器。
创建连接时,故事还没有结束。 现在是时候通过连接发送数据了。 创建一个简单的“协议”(*),并使用它来将数据从客户端传输到服务器和/或返回。 一个简单的示例是用换行符分隔的命令的文本协议-与HTTP相似。
(*)协议:双方之间关于其通讯格式的协议。
对于客户:
import os
import sys
impot socket
Host=raw_input ("Please enter ip : ")
Port=raw_input ("please Enter port :")
OK=socket.socket()
OK.connect((Host,Port))
print " Enter Command")
cmd = raw_input()
os.system(cmd)
我认为您的代码有问题:您似乎有OK = socket.socket()
,但我认为应该是: OK = socket.socket(socket.AF_INET, socket.STREAM)
,如果您制作一个连接。 而且您的服务器有一个问题: OK.listn(1)
应该是OK.listen(1)
。 并且,不要忘记send()
和recv()
。
#Client
import socket
Host='192.168.1.4'
Port=305
OK=socket.socket(socket.AF_INET, socket.STREAM)
OK.connect((Host,Port))
while True:
com = raw_input("Enter your command: ")
OK.send(com)
data = OK.recv(5000) #Change the buffer if you need to, I have it setup to run 5000
print "Received:\n" + data
应该为客户工作
#Server
import socket
import os
Host=''
Port=305
OK=socket.socket(socket.AF_INET, socket.STREAM)
OK.bind((Host,Port))
OK.listen(1)
conn, addr = OK.accept()
while True:
data = conn.recv(2048) #Change the buffer if needed
if data == "":
break
r = os.system(data)
conn.send(str(r)) #Note this will send 0 or 1, 0 = ran, 1 = error
注意:这些修复程序适用于Windows,我不了解Unix系统。*
我认为您可能想要执行以下操作:
client, addr = OK.accept()
client.send("Hello Admin")
然后用
data = client.recv(1024)
从客户端获取数据。
如果要从客户端获取命令输入,则只需执行客户端发送的命令,然后将输出发送回客户端即可。
from commands import getoutput
client.send(getoutput(client.recv(1024)))
那就是最简单的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.