小编Orj*_*anp的帖子

如何让服务器接受来自多个端口的连接?

如何创建一个简单的服务器(简单如接受连接并打印到终端接收的任何内容)接受来自多个端口或端口范围的连接?

我是否必须使用多个线程,每个绑定调用一个.还是有其他解决方案吗?

简单的服务器看起来像这样.

def server():
import sys, os, socket

port = 11116
host = ''
backlog = 5 # Number of clients on wait.
buf_size = 1024

try:
    listening_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    listening_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) 
    listening_socket.bind((host, port)) 
    listening_socket.listen(backlog)
except socket.error, (value, message):
    if listening_socket:
        listening_socket.close()
    print 'Could not open socket: ' + message
    sys.exit(1)

while True:
    accepted_socket, adress = listening_socket.accept()

    data = accepted_socket.recv(buf_size)
    if data:
        accepted_socket.send('Hello, and goodbye.')
    accepted_socket.close()

server()
Run Code Online (Sandbox Code Playgroud)

编辑:这是一个如何完成它的例子.感谢大家.

import socket, select

def server():
import sys, os, socket

port_wan = …
Run Code Online (Sandbox Code Playgroud)

python network-programming

5
推荐指数
1
解决办法
2万
查看次数

RabbitMQ 直接回复。我收到了 AlreadyClosedException

解决:移动

channel.basicPublish("", QUEUE, props, message.getBytes());

以下

channel.basicConsume(replyQueue, ...)

这解决了问题。


我正在尝试弄清楚如何使用 RabbitMQ 直接回复功能。由于文档对如何实现它相当模糊,我尝试使用RPC示例,采用它来使用直接回复。

private final static String QUEUE = "Test_chan";
private void directReplyToClient(ConnectionFactory factory) {
    Connection connection = null;
    Channel channel = null;
    String replyQueue;

    try {
        connection = factory.newConnection();
        channel = connection.createChannel();

        //replyQueue = channel.queueDeclare().getQueue();
        replyQueue = "amq.rabbitmq.reply-to";
        AMQP.BasicProperties props = new AMQP.BasicProperties
                .Builder()
                .replyTo(replyQueue)
                .build();
        String message = "Hello World";
        channel.basicPublish("", QUEUE, props, message.getBytes());

        final BlockingQueue<String> response = new ArrayBlockingQueue<>(1);

        channel.basicConsume(replyQueue, true, new DefaultConsumer(channel) { …
Run Code Online (Sandbox Code Playgroud)

java rabbitmq

4
推荐指数
1
解决办法
1790
查看次数

将ISO8601持续时间(P3Y6M ...)转换为perl中的秒数

我正在尝试将ISO 8601持续时间格式P3Y6M4DT12H30M5S 转换为perl中的秒数.有没有这样做的图书馆?我试过搜索,但我只找到了一个js库.浏览DateTime和Time :: Moment也没有提供解决方案.

perl iso8601

3
推荐指数
1
解决办法
242
查看次数

将论点传递给一个mojolicious应用程序

我想弄清楚在调用一个mojolicious应用程序时是否可以给出一个参数.表明它不容易完成,至少不是五年前.通过查看文档,它看起来有一个选项(或者我读错了吗?).

Mojolicious::Commands->start_app('MyApp');
Mojolicious::Commands->start_app(MyApp => @ARGV);
Run Code Online (Sandbox Code Playgroud)

如果确实可以,我如何从启动功能访问它?我试过一些最明显的,比如...

sub startup {
    my ($self, $arg) = @_;
    ....
Run Code Online (Sandbox Code Playgroud)

这没用.

perl mojolicious

2
推荐指数
1
解决办法
89
查看次数

创建子例程的哈希,并运行一个

我正在尝试复制示例中给出的解决方案.

代码如下:

use strict;
use warnings;

my %hash = (
  one => sub { print 'one'; },
  two => sub { print 'two'; },
);

$hash{one};
Run Code Online (Sandbox Code Playgroud)

我在运行时遇到的错误是:

在t.pl第9行的void上下文中无用的hash元素.

我在这里做了一个运行的例子.

我哪里错了?

perl

1
推荐指数
1
解决办法
88
查看次数

简化小代码示例

让我假装我有以下代码.

num1 = 33
num2 = 45
num3 = 76
lst = ['one', 'two', 'three']

for item in lst:
    if item == 'one':
        print num1
    elif item == 'two':
        print num2
    elif item == 'three':
        print num3
Run Code Online (Sandbox Code Playgroud)

当列表和打印句子之间没有相关性时,有没有办法使这更优雅?意思是,有没有办法摆脱ifs和elifs?

python

0
推荐指数
2
解决办法
298
查看次数