首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python:不在LAN上工作的套接字

Python:不在LAN上工作的套接字
EN

Stack Overflow用户
提问于 2013-03-24 21:23:44
回答 2查看 7.8K关注 0票数 0

我最近度假回来了,我的基本python 2套接字服务器现在无法通过LAN与客户端通信。服务器在mac上,客户端是我的raspberry pi或windows 7机器。我在这里简化了服务器和客户端代码,给出了一个示例:

服务器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import socket
from thread import *

HOST = socket.gethostname()

print HOST

PORT = input ("Enter the PORT number (1 - 10,000)")



s = socket.socket(socket.AF_INET, socket.SOCK_STREAM )
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
print "Socket Created"


s.bind((HOST, PORT))

print "Socket Bind Complete"

s.listen(10)
print "Socket now listening"


    #Sending message to connected client
    #This only takes strings (words


while True:
    #Wait to accept a connection - blocking call
    connection, addr = s.accept()
    print "Connection Established!"

    connection.send("Welcome to the server. Type something and hit enter\n")

    #loop so that function does not terminate and the thread does not end
    while True:

        #Receiving from client
        data = connection.recv(1024)
        if not data:
            break
        connection.sendall(data)
        print data
    connection.close()
s.close()

客户端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import socket #for sockets
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print "Socket Created"

#Get host and port info to connect
host = raw_input("HOST >>>   ")
port = 2468
s.connect((host, port))


while True:   
    #Send some data to the remote server
    message = raw_input(">>>  ")

    #set the whole string
    s.sendall(message)


    reply = s.recv(1024)
    print reply

问题

这里发生什么事情?我正在获得本地IP,但脚本仍然无法通信。这会不会是操作系统的问题?

更多信息

  1. 乒乓 我在我的Mac终端上打开了PI: (67.63.55.3):56个数据字节67.63.55.3: icmp_seq=0 ttl=240 time=17.434 ms 64字节67.63.55.3: icmp_seq=1 ttl=240 time=18.180 ms 64字节67.63.55.3: icmp_seq=2 ttl=240 time=22.046 ms 64字节从67.63.55.3: icmp_seq=3 ttl=240 time=25.124 64字节从67.63.55.3: icmp_seq=4 ttl=240 time=31.773 ms 我的PI没能找到Mac作为主机。我会看看我能做些什么来补救这个问题。 我的电脑能够打开我的mac电脑。我的Mac能够打开我的电脑
  2. 防火墙

我的Mac防火墙关闭了。我将检查Raspberry Pi Stackexchange站点,看看PI是否有防火墙。

一旦我测试了我的windows机器,我会添加更多的信息。

EN

回答 2

Stack Overflow用户

发布于 2013-03-25 00:27:40

在本地运行这两个脚本,它们可以在我的机器上连接和通信。您正面临一个网络问题,这个问题应该很容易调试。

  1. 错误绑定。在服务器上,打印你得到的主机。如果服务器有多个IP,您可能会尝试绑定错误的IP。您还可以将其更改为“0.0.0.0”(仅在服务器端),并查看是否有效。
  2. 防火墙。任何一方都可能在操作系统级别上阻塞tcp通信。调试通过Windows上的Wireshark和unix上的tcpdump完成。开始嗅探,运行您的代码,看看出了什么问题。您很可能会看到客户端发送SYN数据包,但服务器将无法使用SYN|ACK数据包进行应答。如果您看到SYN数据包到达服务器,请尝试完全关闭服务器的防火墙,然后再试一次。否则,客户端将被禁止对外通信(不太可能),您将需要关闭它的防火墙。
  3. In use port.尝试删除SO_REUSEADDR进行调试,并查看是否有什么变化。
  4. 异常。确保您不会忽略套接字中的任何异常。
票数 0
EN

Stack Overflow用户

发布于 2013-09-23 03:42:24

您的代码运行良好,不过,我做了一些小更正,并在代码中的注释中对它们进行了解释:

服务器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import socket
from thread import *

# 1.Gets the local ip/ip over LAN.
HOST =socket.gethostbyname(socket.gethostname()) 

print HOST

# 2.Use port no. above 1800 so it does not interfere with ports already in use.
PORT =input ("Enter the PORT number (1 - 10,000)") 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM )
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
print "Socket Created"
s.bind((HOST, PORT))
print "Socket Bind Complete"
s.listen(10)
print "Socket now listening"
while True:
    connection, addr = s.accept()
    print "Connection Established!"
    connection.send("Welcome to the server. Type something and hit enter\n")
    while True:
        data = connection.recv(1024)
        if not data:
            break
        connection.sendall(data)
        print data
        connection.close()
s.close()

客户端:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import socket 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print "Socket Created"
host = raw_input("HOST >>>   ")

# 3. Use the same port no. entered on server.py as the client binds to the 
#    same port
port = input ("Enter the PORT number (1 - 10,000)") 
s.connect((host, port))

while True:   
    message = raw_input(">>>  ")    
    s.sendall(message)
    reply = s.recv(1024)
    print reply

上面的代码对我来说很好,我相信它对你也是一样的,因为我也经历过同样的麻烦。发现的bugs -我把它们放在代码中的注释中--请看一看。

干杯……!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15608189

复制
相关文章
Ubuntu下安装Python3和IDLE3
发现它是python2.*的,因为Ubuntu很多底层采用的是Python2.*,Python3和Python2是互相不兼容的,所以此时不能卸载Python2!!!需要将默认Python的指向Python3。
全栈程序员站长
2022/09/08
7820
Ubuntu下安装Python3和IDLE3
当我还在和ChatGPT聊天,有人已经开始用它来控制机器人干活了
机器之心报道 编辑:铭怿、蛋酱 ChatGPT 的功能目前已扩展到机器人领域,可以用语言直观控制如机械臂、无人机、家庭辅助机器人等的多个平台。这会改变人机交互的未来形式吗? 你可曾想过用自己的话告诉机器人该做什么,就像对人说话那样? 比如说,只要告诉你的家庭助理机器人「请帮我热一下午餐」,然后它就能自己找到微波炉。很神奇,对吗? 尽管语言是人类表达意图的最直观的方式,但此前很长一段时间,人们仍然严重依赖手写代码来实现对机器人的控制。不过,当 ChatGPT 出现之后,这种情况要变一下了。 在最近的一项研
机器之心
2023/02/28
5480
当我还在和ChatGPT聊天,有人已经开始用它来控制机器人干活了
Python 一个简单的读取excel例
笔者安装了python3版本,然后IDE安装了Pycharm,感受一下python的开发环境
py3study
2020/01/08
8790
如何在Windows上安装Python【Programming(Python)】
所以你想学习编程吗?Python是最常见的语言之一,它以面向对象的结构和简单的语法的独特结合而流行。Python还是一种解释型语言,这意味着您无需学习如何将代码编译为机器语言:Python可以帮您实现这一点,从而使您有时可以在编写代码的同时立即进行测试。
Potato
2019/12/01
1.9K0
如何在Windows上安装Python【Programming(Python)】
python3 virtualenv
在安装了python3之后,在项目开发的过程中,使用pip3进行库安装都会下载安装到环境变量设置好的地方,也就是python3安装的根目录下。 但是如果同时要开发多个不同的应用项目,而不同应用项目对于同一个库需要适配不同的版本,这种情况怎么办呢?
Devops海洋的渔夫
2019/05/30
3.3K0
Mu 入门:一个面向初学者的 Python 编辑器
Mu 是一个给初学者的 Python 编辑器,它旨在使学习体验更加愉快。它使学生​​能够在早期体验成功,这在你学习任何新知识的时候都很重要。
用户8639654
2021/10/21
2.1K0
CentOS7 安装 Python3.6
先看编译安装,编译安装后的文件目录基本和Windows平台上目录差不多。指定安装路径的话,所有的文件都是在一起的。 后面有yum的安装的方法。
py3study
2020/01/07
3.5K1
换掉 Maven,我用它!!!
相信使用Java的同学都用过Maven,这是一个非常经典好用的项目构建工具。但是如果你经常使用Maven,可能会发现Maven有一些地方用的让人不太舒服:
java进阶架构师
2021/02/05
5400
换掉 Maven,我用它!!!
选择篇(011)-当我们这样做时会发生什么?
参考答案:A 解析: 这在JavaScript中是可能的,因为函数也是对象!( 原始类型之外的所有东西都是对象) 函数是一种特殊类型的对象。您自己编写的代码并不是实际的函数。该函数是具有属性的对象,此属性是可调用的。
齐丶先丶森
2022/05/12
1920
Install Jumpserver12
进行编译安装[root@h165 Python-3.6.1]# ./configure && make && make installchecking build system type... x86_64-unknown-linux-gnuchecking host system type... x86_64-unknown-linux-gnuchecking for python3.6... nochecking for python3... nochecking for python... pytho
franket
2022/07/10
1510
Centos7 安装python3、pip3、ipython3
直接下载安装包如下: wget "https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz"
Devops海洋的渔夫
2019/05/31
1.4K0
再撩Python
如果你觉得很复杂,不要慌张,它本来就很复杂。 如果你觉得很简单,不要慌张,它本来就很简单。 --小浪 1、起手 还要把Python的开发环境说说。 2、Python安装 Python在各个操作系统上都有,所以Python代码天生就是跨平台的。在Windows上写好了代码,到Linux/Mac上不用改动一行代码,就平稳的跑起来了,感觉很鸡动有没有。 Python的安装也很方便的,在Windows下,到Python的官网(https://www.python.org/)上下安装包(选Python3的),双击后,
企鹅号小编
2018/01/25
6390
命令模式(Command)
1. 模式的定义 电脑开机的几个过程:1. 加载电源 2. 设备检查 3. 装载系统 客户端只是想要发出命令或者请求,不关心请求的真正接收者是谁,也不关心具体如何实现,而且同一个请求的动作可以有不同的
Java高级架构
2018/07/20
5320
Command – 命令模式
大部分应用都存在非常多的菜单和一些操作button,但在设计这些菜单和button的时候,并不知道它要运行什么样的操作。在设计删除、复制和撤销这些详细实现的时候,也不知道在要什么地方用到,可能是代码里面直接调用,也可能是界面上点击了某个button后发生的操作。为了解决菜单和详细操作的这样的耦合度,就须要使用Command-命令模式:
全栈程序员站长
2022/07/13
2560
Command – 命令模式
命令(Command)模式
命令(Command) Intent 将命令封装成对象中,具有以下作用: 使用命令来参数化其它对象 将命令放入队列中进行排队 将命令的操作记录到日志中 支持可撤销的操作 Class Diagram Command:命令 Receiver:命令接收者,也就是命令真正的执行者 Invoker:通过它来调用命令 Client:可以设置命令与命令的接收者 Implementation 设计一个遥控器,可以控制电灯开关。 public interface Command { void execut
MickyInvQ
2022/05/06
2400
命令(Command)模式
命令模式(Command)
命令模式是一种行为型模式,它可将请求转换为一个包含与请求相关的所有信息的独立对象。该转换让你能根据不同的请求将方法参数化、延迟请求执行或将其放入队列中,且能实现可撤销操作。 简单来说,命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。
兜兜转转
2023/03/08
4940
命令模式(Command)
#PY小贴士# 为什么我 pip 装了库,代码里却用不了?
明明我在控制台下通过 pip 安装后显示 successful 安装成功,但在代码里 import,就报错说 module not found,模块不存在?
Crossin先生
2020/01/17
1.4K0
命令模式(Command)
命令模式(Command) 命令模式(Command)[Action/Transaction] 意图:将一个请求封装为一个对象,从而可用不同的请求对客户参数化。对请求排队或记录请求日志,以及支持可撤消
Florian
2018/02/05
4200
命令模式(Command)
-bash: yum: command not found 错误
卸载:rpm -aq|grep yum|xargs rpm -e --nodeps
OwenZhang
2021/12/08
3.9K0
错误:该行已经属于另一个表
从一个TABLE中取一行放到另一个TABLE里报错: 该行已经属于另一个表。的解决办法 用下面来个方法就OK了。 DataTable dt = new DataTable(); dt = ds.Tables["All"].Clone();//克隆All的结构传递给dt DataRow[] dr=this.dataSet31.Tables["Product"].Select("bc=1"); //通过条件得到符合条件的行 for(int i=0;i<dr.Length;i++) { //将数组元素加入表.
hbbliyong
2018/03/05
7930

相似问题

Google游戏Android领导板意外响应代码410

15

蜂房服务响应410消失

14

响应代码410,以jmeter表示

10

IIRF -如何发送410 Gone响应

111

错误410:消失(代码)

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文