小编XZS*_*XZS的帖子

数据报是否总是完全收到?

大多数数据报接收函数,如c的recv或read,javas DatagramPacket类或pythons SocketServer,都可以找出接收到的数据量.

C:

int amount = recv(sock, buf, n, MSG_WAITALL);
Run Code Online (Sandbox Code Playgroud)

Java的:

int amount = datagramSocket.getLength();
Run Code Online (Sandbox Code Playgroud)

蟒蛇:

class MyUDPHandler(socketserver.BaseRequestHandler):
    def handle(self):
        amount = len (self.request[0])
Run Code Online (Sandbox Code Playgroud)

这些可靠吗?或者是否可能只收到部分消息,例如数据包碎片或网络延迟?
换句话说:当我通过udp发送一个可变长度的数据块并在另一端接收它时,这些数量值是否恰好等于原始块的大小?

编辑:
ninjalj提出了一个很好的观点,我想在此处加入.当接收功能被中断时会发生什么,例如通过信号?当两个线程同时尝试从同一个套接字接收时会发生什么?

c python java udp datagram

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

Java.nio频道和TLS

如何使用TLS 保护Java SocketChannel,ServerSocketChannel或者甚至是a DatagramChannel

我知道有一些框架(#1 #2)可以做广告,但我想知道是否有可能仅使用纯Java标准库来实现这一点.

java ssl nio socketchannel

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

规范化/规范化URL?

我正在寻找一个库函数来规范化Python中的URL,即删除路径中的"./"或"../"部分,或添加默认端口或转义特殊字符等.结果应该是一个字符串,对于指向同一网页的两个URL是唯一的.例如http://google.com,http://google.com:80/a/../应返回相同的结果.

我更喜欢Python 3并且已经查看了urllib模块.它提供了分割URL的功能,但没有规范它们的功能.Java具有URI.normalize()执行类似操作的功能(虽然它不认为默认端口80等于没有给定端口),但是这样的东西是python吗?

url normalization python-3.x

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

多个In-Reply-To

邮件用户代理通常通过根据包含其他消息的消息IDIn-Reply-ToReferences头字段将消息链接在一起来显示电子邮件的线程.虽然邮件通常只回复另一条消息,但可能是一条消息回答多个其他消息.该标准允许两个字段中的多个条目.当我通过这种方式发送引用回复多个ID 的电子邮件时,我能得到什么?

  • 这样做是好的做法吗?
  • 它是否会混淆广泛的MUAs?
  • 如何在线程视图中显示这样的消息有什么共同点?

email email-headers

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

zip_longest没有填充值

我正在寻找Python zipzip_longest函数之间的中间点(来自itertools模块),它耗尽了所有给定的迭代器,但没有填充任何东西.因此,例如,它应该像这样转置元组:

(11, 12, 13    ),        (11, 21, 31, 41),
(21, 22, 23, 24),  -->   (12, 22, 32, 42),
(31, 32        ),        (13, 23,     43),
(41, 42, 43, 44),        (    24,     44)
Run Code Online (Sandbox Code Playgroud)

(添加了空格以实现更好的图形对齐.)

我设法通过清理fillvalues后来制定原始解决方案zip_longest.

def zip_discard(*iterables, sentinel = object()):
    return map(
            partial(filter, partial(is_not, sentinel)), 
            zip_longest(*iterables, fillvalue=sentinel))
Run Code Online (Sandbox Code Playgroud)

有没有办法在不引入哨兵的情况下做到这一点?可以使用改进yield吗?哪种方法最有效?

python functional-programming python-itertools

10
推荐指数
2
解决办法
2009
查看次数

省略传递空的带引号的参数

我的 bash 脚本中有一些变量可能包含文件名或未设置。它们的内容应作为附加参数传递给程序。但是当变量未设置时,这会留下一个空参数。

$ afile=/dev/null
$ anotherfile=/dev/null
$ unset empty
$ cat "$afile" "$empty" "$anotherfile"
cat: : No such file or directory
Run Code Online (Sandbox Code Playgroud)

如果没有引号,它就可以正常工作,因为附加参数被简单地省略了。但由于变量可能包含空格,因此必须在此处用引号引起来。

我知道我可以简单地将整条线包装在对空性的测试中。

if [ -z "$empty" ]; then
  cat "$afile" "$anotherfile"
else
  cat "$afile" "$empty" "$anotherfile"
fi
Run Code Online (Sandbox Code Playgroud)

但对每个变量进行一次测试会产生一棵巨大而复杂的决策树。

有没有更紧凑的解决方案?bash 可以省略带引号的空变量吗?

bash arguments argument-passing variable-expansion

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

用ffmpeg重复视频的第一帧

要重复视频的第一帧,例如填充它以补偿更长的音频,可以使用以下管道.

ffmpeg -i video.mp4 -vframes 1 -f image2 image.jpg
ffmpeg -loop 1 -i image.jpg -t 5 pad.mkv
ffmpeg -i pad.mkv -i video.mp4 -i audio.mp3 -filter_complex '[0:v] [1:v] concat' -c:a copy -map 2:a out.mkv
Run Code Online (Sandbox Code Playgroud)

(Concat过滤器首选连接输入,因为视频和填充剪辑的编解码器可能不同.)

相比之下,在开始时具有静音的填充音频仅适合一行.

ffmpeg -i video.mp4 -i audio.mp3 -map 0:v -filter_complex 'aevalsrc=0:duration=5 [pad],[pad] [1:a] concat=v=0:a=1' -c:v copy out.mkv
Run Code Online (Sandbox Code Playgroud)

视频填充是否也可以在一个ffmpeg执行中压缩?

video ffmpeg video-processing video-encoding

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

Valas的封口如何映射到Genie?

瓦拉教程有一个使用匿名方法有关的DBus例子.

Bus.own_name (BusType.SESSION, "org.example.DemoService", /* name to register */
              BusNameOwnerFlags.NONE, /* flags */
              on_bus_aquired, /* callback function on registration succeeded */
              () => {}, /* callback on name register succeeded */
              () => stderr.printf ("Could not acquire name\n")); /* callback on name lost */
Run Code Online (Sandbox Code Playgroud)

我试图在Genie中重写此代码,但无法设法转换最后两行.该精灵教程对如何使用闭包来定义一个事件处理的例子.

f.my_event += def (t, a)
    print "event was detected with value %d", a
Run Code Online (Sandbox Code Playgroud)

如何在Genie的方法调用中使用匿名方法定义?

lambda closures vala genie

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

xmodmap和多个布局

我目前使用两个键盘布局与xorg.conf一样

Section "InputClass"
  Identifier      "Keyboard Defaults"
  MatchIsKeyboard "yes"
  Option          "XkbLayout" "us, de"
  Option          "XkbOptions" "grp:caps_toggle"
EndSection
Run Code Online (Sandbox Code Playgroud)

现在我想映射AltGr以将其用作上下文菜单键.这可以通过以下方式完成

xmodmap -e "keycode 108 = Menu"
Run Code Online (Sandbox Code Playgroud)

但只修改第一个布局上的键.如何在所有布局上修改它?可以使用高级XkbOption或XkbLayout参数完成某些事情吗?

keyboard contextmenu internationalization xmodmap

5
推荐指数
0
解决办法
506
查看次数

在Git历史记录中查找文件的哈希

我尝试在历史记录中的给定位置查找文件的哈希。

git ls-files $REVISION $PATH | \
  sed -n 's/^.\{6\} .\+ \([0-9a-f]\{40\}\)\t.*$/\1/p'
Run Code Online (Sandbox Code Playgroud)

可以,但是看起来不太雅致。它显示模式,类型,哈希和路径,然后sed仅用于过滤哈希。是否有一些仅打印哈希开头的命令?

我想象已经忽略了一些更简单的东西git show --pretty=%hash $REVISION:$PATH。是否存在这样的Git命令?

git hash

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

Gtk时间选择器小部件

我正在寻找一个GtkWidget来选择一个时间值.它不必像Android提供的轮播那样复杂,两个链接的数字输入字段就足够了.理想情况下,如果分钟字段超过60或0,则小时字段应更改.

我发现GTK(版本3.22)本身没有附带这样的小部件.对于日期,只有更复杂的GtkCalendar.

我错过了实现这样一个类的简单方法吗?或者在第三方库中可以使用它?

gtk gtk3

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