小编K J*_*K J的帖子

TCP:两个不同的套接字可以共享一个端口吗?

这可能是一个非常基本的问题,但它让我感到困惑.

两个不同的连接插座可以共用一个端口吗?我正在编写一个应该能够处理超过10万个并发连接的应用服务器,而且我们知道系统上可用的端口数量大约为60k(16位).连接的套接字被分配给新的(专用)端口,因此这意味着并发连接的数量受端口数量的限制,除非多个套接字可以共享同一个端口.所以问题.

我在这里先向您的帮助表示感谢!

sockets port network-programming tcp

97
推荐指数
4
解决办法
10万
查看次数

Scala(或Java)中泛型函数的专业化

是否可以在Scala中专门化泛型函数(或类)?例如,我想编写一个将数据写入ByteBuffer的泛型函数:

def writeData[T](buffer: ByteBuffer, data: T) = buffer.put(data)
Run Code Online (Sandbox Code Playgroud)

但由于put方法只需要一个字节并将其放入缓冲区,我需要将它专门用于Ints和Longs,如下所示:

def writeData[Int](buffer: ByteBuffer, data: Int) = buffer.putInt(data)
def writeData[Long](buffer: ByteBuffer, data: Long) = buffer.putLong(data)
Run Code Online (Sandbox Code Playgroud)

它不会编译.当然,我可以分别编写3个不同的函数writeByte,writeInt和writeLong,但是假设有一个数组的另一个函数:

def writeArray[T](buffer: ByteBuffer, array: Array[T]) {
  for (elem <- array) writeData(buffer, elem)
}
Run Code Online (Sandbox Code Playgroud)

如果没有专门的writeData函数,这将无法工作:我将不得不部署另一组函数writeByteArray,writeIntArray,writeLongArray.每当我需要使用类型相关的写函数时,必须以这种方式处理这种情况并不酷.我做了一些研究,一个可能的解决方法是测试参数的类型:

def writeArray[T](buffer: ByteBuffer, array: Array[T]) {
  if (array.isInstanceOf[Array[Byte]])
    for (elem <- array) writeByte(buffer, elem)
  else if (array.isInstanceOf[Array[Int]])
    for (elem <- array) writeInt(buffer, elem)
  ...
}
Run Code Online (Sandbox Code Playgroud)

这可能有效,但效率较低,因为类型检查是在运行时完成的,与专用函数版本不同.

所以我的问题是,在Scala或Java中解决此类问题的最理想和首选方法是什么?我提前感谢您的帮助!

java generics scala specialized-annotation

28
推荐指数
2
解决办法
4676
查看次数

使用自引用外键删除行

我有一个MySQL表,其定义如下:

CREATE TABLE `guestbook` (
  `Id` int(10) unsigned NOT NULL,
  `ThreadId` int(10) unsigned NOT NULL,
  PRIMARY KEY (`Id`),
  KEY `ThreadId` (`ThreadId`),
  CONSTRAINT `guestbook_ibfk_1` FOREIGN KEY (`ThreadId`) REFERENCES `guestbook` (`Id`)
) ENGINE=InnoDB;

目前表中只有一行:

mysql> select * from guestbook;
+-----+----------+
| Id  | ThreadId |
+-----+----------+
| 211 |      211 |
+-----+----------+

问题是没有破坏约束就无法删除这一行.

mysql> delete from guestBook;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`polaris`.`guestbook`, CONSTRAINT `guestbook_ibfk_1` FOREIGN KEY (`ThreadId`) REFERENCES `guestbook` (`Id`))

由于ThreadId列的定义不为null,因此也不可能将ThreadId临时设置为不同的值以删除该行.有没有办法删除行而不更改表的定义或删除整个表?

mysql sql foreign-keys

16
推荐指数
4
解决办法
8579
查看次数

LALR vs LL解析器

我一直在使用lex/yacc,现在我正在尝试切换到ANTLR.主要关注的是ANTLR是一个LL(*)解析器,与yacc不同,它是LALR.我习惯于自下而上思考,我不知道LL语法的优点是什么.人们说LL语法现在更容易理解,更受欢迎.但似乎LR解析器更强大,例如LL解析器无法处理左递归,尽管似乎有一些解决方法.

那么问题是LL语法比LALR有什么优势?如果有人能给我一些例子,我会很感激.有用文章的链接也很棒.

感谢您的帮助!

(我认为这是一个很好的资源:LL解析器对LR解析器有什么优势?但是对于一些例子它会更好.)

parsing yacc antlr lalr ll-grammar

15
推荐指数
2
解决办法
7270
查看次数

UIWebView - 在<img>标签上启用动作表

是仅仅是我还是<img>在UIWebView中禁用了标签上的操作表?在Safari中,例如,当您想要在本地保存图像时,触摸并按住图像以显示操作表.但它不适用于我的自定义UIWebView.我的意思是,它仍然适用于<a>标签,即当我触摸并按住html链接时,会显示一个操作表.但不是<img>标签.

我尝试过放入img { -webkit-touch-callout: inherit; }css这样的东西,但是没用.另一方面,当我双击并按住图像时,会出现一个复制气球.

所以问题是,是否<img>已为UIWebView禁用了标签的默认操作表标注?是这样,有没有办法重新启用它?我已经google了一下,看到了很多关于如何在UIWebView中禁用它的问答,那么只是我没有看到弹出窗口吗?

提前致谢!

iphone uiwebview ios4 ios

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

Scala:数组和类型擦除

我想编写重载函数如下:

case class A[T](t: T)
def f[T](t: T) = println("normal type")
def f[T](a: A[T]) = println("A type")
Run Code Online (Sandbox Code Playgroud)

结果如我所料:

f(5)=>正常类型
f(A(5))=> A类型

到现在为止还挺好.但问题是同样的事情不适用于数组:

def f[T](t: T) = println("normal type")
def f[T](a: Array[T]) = println("Array type")
Run Code Online (Sandbox Code Playgroud)

现在编译器抱怨:

double definition:方法f:[T](t:Array [T])单位和方法f:[T](t:T)第14行的单位在擦除后具有相同的类型:(t:java.lang.Object)Unit

我认为类型擦除后第二个函数的签名应该是(a:Array [Object])Unit not(t:Object)Unit,所以它们不应该相互冲突.我在这里错过了什么?

如果我做错了什么,那么编写f的正确方法是什么,以便根据参数的类型调用正确的?

scala overloading type-erasure

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

Apple脚本:如何将html内容复制到剪贴板?

我知道如何将纯文本复制到剪贴板:

oascript -e 'set the clipboard to "plain text"'
Run Code Online (Sandbox Code Playgroud)

但问题是如何将html内容复制到剪贴板?例如,如何将以下html内容复制到剪贴板:

<b>bold text</b>
Run Code Online (Sandbox Code Playgroud)

当我将它粘贴到TextEdit中时,我得到粗体文本?

我在这里先向您的帮助表示感谢!


我找到了一个中间解决方案:

echo "<b>bold text</b>" | textutil -stdin -stdout -format html -convert rtf | pbcopy
Run Code Online (Sandbox Code Playgroud)

到目前为止这很好,但不幸的是我发现它不适用于图像标记:

echo "<img src=\"https://www.google.com/images/srpr/logo3w.png\">" | textutil -stdin -stdout -format html -convert rtf | pbcopy
Run Code Online (Sandbox Code Playgroud)

这不能完成我想要的工作,所以有人知道原因吗?
谢谢!


我找到了一个有效的解决方案并将其发布在下面:)

html macos applescript rtf

8
推荐指数
2
解决办法
3758
查看次数

使用AES/CTR模拟流密码

我正在编写一个应用程序服务器,我决定使用AES128/CTR/NoPadding来保护连接,因为它被认为是足够安全的,而不必将字节扩展到块边界,我认为它非常适合TCP.在逻辑上是一个无缝的流.

问题是Cipher.update()不会返回加密块,直到它有一个完整的16字节块,因为CTR基本上是基于块密码,虽然模拟流密码.我应该从tcp套接字读取数据并在消息到达时立即处理消息,但是我无法检索最新的块,因为它仍在构建并且其大小小于16个字节.我不能等待,因为我们不知道下一条消息何时发送.当然我可以调用Cipher.doFinal()来获取剩余的但这意味着流(连接)的结束和Cipher对象将被重新初始化.

如果有办法偷看结转,我觉得这很好.CTR只是简单地使用密钥流对纯文本进行异或,因此无论块中的其余字节如何,我都应该能够获得加密数据.这个问题会有一个很好的解决方法吗?我正在考虑编写一个包装器,用零加密假纯文本以提前获得密钥流和手动进行异或,但我想知道其他人是如何解决这个问题的.

更新

我正在开发一个Android应用程序,结果发现这是Dalvik VM的问题.正如Robert和monnand在下面指出的那样,Java SE至少在默认提供程序中没有这个问题.我想我必须编写一个包装类或将模式更改为CFB8来解决这个问题.(CTR8无效)感谢所有回复!

java encryption cryptography bouncycastle aes

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

如何在Eclipse IDE中找到安装的Scala版本?

问题是我如何找到Eclipse IDE中安装的Scala模块的版本?我知道我已经安装了2.9.xxx的东西,但我想继续跟踪版本号,以便将来更新,以便查找正确的API手册.

或者是否有一般方法可以在Eclipse IDE中查看已安装插件的版本?

提前致谢!

eclipse scala eclipse-plugin scala-ide

6
推荐指数
2
解决办法
4282
查看次数

如何在Eclipse IDE中默认将Scala项目作为Scala应用程序运行?

我是Eclipse IDE的新手,问题是如何在默认情况下将Scala项目作为Scala应用程序运行?当我通过点击⌘R键运行项目时,它总是询问如何运行它,作为Scala或Java应用程序.有没有办法跳过这个并且默认情况下总是以Scala运行它?

我想它与启动配置有某种关系,但是当我尝试为项目创建一个新的启动配置时,它没有给我Scala的选项:只有Java applet和Java应用程序显示为选项.

我提前感谢您的帮助!

eclipse scala scala-ide

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