【发布时间】:2010-10-27 11:12:20
【问题描述】:
我想得到一些建议,因为我在向服务器发送 RTSP 消息的客户端之间存在冲突。 首先,我为我的英语向大家道歉。
嗯,我正在做的是一个 java 流视频 应用程序。
clients设置
TCP与服务器连接以交换RTSP消息服务器通过
UDP向客户端请求使用JPEG有效负载类型的RTP数据包中的帧,因为我的视频是MotionJPEG格式。
更具体一点:
- 服务器使用线程处理同一端口上的客户端 TCP 连接
- 连接的每个客户端都向服务器发送该端口要用于 UDP 传输的端口。
问题是服务器在 tcp 通信上接收和分析 RTSP 消息,但是当客户端更多地连接到服务器时,RTPS 消息会混淆订单,我的服务器想要转换为整数,其中只是字符串,从写入的“单播”中获取会话编号等等......
这是我为处理不同的客户所做的:
ServerSocket socket = new ServerSocket(7777);
while(true) {
System.out.println("\nAspettando una connessione...");
Socket incoming = socket.accept();
Server server = new Server(incoming);
Thread t = new Thread(server);
t.start();
}
我的类服务器实现 Runnable 来处理计时器 以播放、暂停和停止流式传输。
它可以向一个客户端提供视频流,但是服务器在来自冻结的客户端的 TCP 请求上混淆了 RTSP。如果我关闭这些并打开第三个,它会再次开始工作,因为服务器了解正在接收的内容。
更具体地说,服务器中的异常取决于客户端发送的 RTSP 消息。例如
$Server(应该接收 Cseq)从 (/192.168.0.4) 接收:Session: 12345678
$Server(应该接收 Cseq)来自 (/127.0.0.1):Cseq: 4
所以例外情况可能是:
Exception in thread "Thread-3" java.lang.NullPointerException
at java.util.StringTokenizer.<init>(StringTokenizer.java:182)
at java.util.StringTokenizer.<init>(StringTokenizer.java:219)
at progetto2.Server.run(Server.java:91)
at java.lang.Thread.run(Thread.java:619)
或
何时找到传输:RTP/UDP;unicast;client_port=8888\r\n 类似的东西(我很抱歉我在线程中丢失了异常)
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:449)
at java.lang.Integer.parseInt(Integer.java:499)
at progetto2.Server.run(Server.java:108)
at java.lang.Thread.run(Thread.java:619)
所以我应该处理不同的客户端,我应该使用不同的 TCP 端口吗? 很抱歉,但我记得在多客户端聊天中我没有遇到这些问题。 我希望以最好的方式解释我的问题。
感谢大家对我的帮助和建议!
亲切的问候!
【问题讨论】:
标签: java sockets networking tcp client-server