我想在java中实现SIP协议,并希望能够创建不同的客户端(5个或更多)并使它们连接到代理服务器.这一切都是出于测试目的,所以我希望能够在相当低的水平上看到正在发生的事情.
客户端应该首先能够通过文本进行通信,之后也可以通过音频进行通信.(如果我到那么远)
我已经阅读了一些关于JAIN库的内容,我从中了解到它们并不是非常适合服务器端?我也没有找到任何代理服务器示例,教程,使用JAIN.
我也找到了这本SIP Servlet教程书,我过去使用过HTTP servlet,但是我应该选择servlet还是JAIN还是......?
我是SIP的新手,所以我真的不知道从哪里开始,或者与java结合使用.
我试图在一个简单的客户端 - 服务器程序中说明Nagle算法.但我无法弄明白,或者让它清楚地印在我身上.
在我的示例中,客户端只生成从1到1024的int并将它们发送到服务器.服务器只是将这些int转换为十六进制字符串并将它们发送回客户端.
几乎所有我改变的结果都是相同的结果.int的发送和重新发送在256个int的块中.我在两边尝试了setTcpNoDelay(true)来查看更改,但这在我的控制台中给出了相同的结果.(但不是在wireshark中,我看到服务器和客户端之间发送的数据包的数量有很大差异)但我的目标是能够在控制台中看到它,我猜测有一些ObjectOutputStream或类似的缓冲区阻止一切?
当我output = new PrintWriter(client.getOutputStream(), true)改为false (The true或false:autoFlush- 布尔值; if true,the println,printf或者format方法将刷新输出缓冲区)时,我的服务器不再向客户端提供任何输出.
基本上我的目标是只提供服务器和/或客户端的真或假作为参数来设置TcpNoDelay,在启动时,清楚地看到控制台中输入/输出的差异.我不确定所使用的一切,所以欢迎任何帮助清除这一点.
服务器:
package Networks.Nagle;
import java.io.*;
import java.net.*;
import java.util.*;
public class NagleDemoServer
{
private static ServerSocket serverSocket;
private static final int PORT = 1234;
public static void main(String[] args) throws IOException
{
int received = 0;
String returned;
ObjectInputStream input = null;
PrintWriter output = null;
Socket client; …Run Code Online (Sandbox Code Playgroud) 我想知道这是否正常.因为没有错误,连接应该通过以下方式终止:
FIN ->
<- ACK
<- FIN
ACK ->
Run Code Online (Sandbox Code Playgroud)
我在TCP连接结束时得到这个(通过SSL,但我也得到它未加密):
From To
1494 server client TCP search-agent > 59185 [PSH, ACK] Seq=25974 Ack=49460 Win=63784 Len=50
1495 client server TCP 59185 > search-agent [ACK] Seq=49460 Ack=26024 Win=63565 Len=0
1496 client server TCP 59185 > search-agent [PSH, ACK] Seq=49460 Ack=26024 Win=63565 Len=23
1497 client server TCP 59185 > search-agent [FIN, ACK] Seq=49483 Ack=26024 Win=63565 Len=0
1498 server client TCP search-agent > 59185 [PSH, ACK] Seq=26024 Ack=49484 Win=63784 Len=23
1499 client server TCP …Run Code Online (Sandbox Code Playgroud)