当前位置: 技术问答>java相关
求助:编写聊天服务器遇到的问题
来源: 互联网 发布时间:2015-09-25
本文导语: 使用java编写聊天服务器,使用ServerSocket监听端口,使用了多线程处理程序 编写了一个ClientTest测试程序,ClientTest通过System.in取得键盘输入,通过writeUTF发出,Server端得到后发到各个Client端。程序都可以正常运行,没...
使用java编写聊天服务器,使用ServerSocket监听端口,使用了多线程处理程序
编写了一个ClientTest测试程序,ClientTest通过System.in取得键盘输入,通过writeUTF发出,Server端得到后发到各个Client端。程序都可以正常运行,没有出现错误。可以发送信息到各个client端。
现在要做的是Server和浏览器通讯的交互,Server监听端口为1800, 浏览器http://127.0.0.1:1800,建立连接。但问题是Server不能和浏览器进行交互,也就是说,Server不能向浏览器发送信息,通过url提交的信息浏览器也无法接受到。这个工作该如何处理?如何让Server发送信息,在浏览器上显示?要模范http协议?还要做什么?
我如何才能得到http通过get方法提交的数据信息?
编写了一个ClientTest测试程序,ClientTest通过System.in取得键盘输入,通过writeUTF发出,Server端得到后发到各个Client端。程序都可以正常运行,没有出现错误。可以发送信息到各个client端。
现在要做的是Server和浏览器通讯的交互,Server监听端口为1800, 浏览器http://127.0.0.1:1800,建立连接。但问题是Server不能和浏览器进行交互,也就是说,Server不能向浏览器发送信息,通过url提交的信息浏览器也无法接受到。这个工作该如何处理?如何让Server发送信息,在浏览器上显示?要模范http协议?还要做什么?
我如何才能得到http通过get方法提交的数据信息?
|
注:上面的servlet应为applet,手误……
|
> Server不能向浏览器发送信息,通过url提交的信息浏览器也无法接受到
http协议是无状态协议,即只有客户端向服务器端发出请求(包括get put head 等等action),服务器根据请求的内容作出响应。无法做到服务器主动向浏览器推送数据。所谓的“推”技术一般都是基于socket的applet或者刷新(巧妙的无非是局部刷新)。通过url提交的信息浏览器也无法接受到---服务器向浏览器提交?显然不可能咯,呵呵。
所以,根据http协议来看,浏览器不向服务器发出请求,服务器根本不知道你的存在,或者说不care,如何能推,如何能实时呢?
如果你的意思是要通过浏览器访问服务器的8000,那用URLConnection就好了,只要构造一个合适的url,在url里面带上必需的参数即可。
不过更好的方法是在服务器端运行一个servlet,通过他去连接你的聊天室服务器。这样的话,webchat通过和servlet交互即可。不过不好的地方是这不是实时聊天。
实时聊天,也就所谓的“推”,最好的方法是做一个applet来做client
通讯协议也就不一定要用http协议来包装了(用http协议的好处是一般的防火墙不限制)。
如果用applet还可以通过javascript发出浏览请求,也很方便。
http协议是无状态协议,即只有客户端向服务器端发出请求(包括get put head 等等action),服务器根据请求的内容作出响应。无法做到服务器主动向浏览器推送数据。所谓的“推”技术一般都是基于socket的applet或者刷新(巧妙的无非是局部刷新)。通过url提交的信息浏览器也无法接受到---服务器向浏览器提交?显然不可能咯,呵呵。
所以,根据http协议来看,浏览器不向服务器发出请求,服务器根本不知道你的存在,或者说不care,如何能推,如何能实时呢?
如果你的意思是要通过浏览器访问服务器的8000,那用URLConnection就好了,只要构造一个合适的url,在url里面带上必需的参数即可。
不过更好的方法是在服务器端运行一个servlet,通过他去连接你的聊天室服务器。这样的话,webchat通过和servlet交互即可。不过不好的地方是这不是实时聊天。
实时聊天,也就所谓的“推”,最好的方法是做一个applet来做client
通讯协议也就不一定要用http协议来包装了(用http协议的好处是一般的防火墙不限制)。
如果用applet还可以通过javascript发出浏览请求,也很方便。
|
java有安全控制的,你要修改它的policy文件,开放1800段口才行,
另外,你如果要自己监听端口的话,要自己根据http协议去解释得到
的消息,如果是和浏览器交互的话,最好还是加一层servlet进去
另外,你如果要自己监听端口的话,要自己根据http协议去解释得到
的消息,如果是和浏览器交互的话,最好还是加一层servlet进去
|
你应该去看看一些关于HTTP协议的东西
我建议你到网上去搜索一下
有许多简单的服务器例子你可以去看一看
我建议你到网上去搜索一下
有许多简单的服务器例子你可以去看一看
|
用URL和URLConnection应该可以封装HTTP的连接了,不用自己实现HTTP协议。
如
URL url=new URL("http://1`27.0.0.1:8000");
URLConnection conn=new URLConnection(url);
conn.get**Stream()
。。。
另外"rn"最好写为'u0d0a',因为java中却省将一个字符作为16位而不是8位
不过可以做“ISO-8859-1”等编码改变
如
URL url=new URL("http://1`27.0.0.1:8000");
URLConnection conn=new URLConnection(url);
conn.get**Stream()
。。。
另外"rn"最好写为'u0d0a',因为java中却省将一个字符作为16位而不是8位
不过可以做“ISO-8859-1”等编码改变