java的socke client端接收xml报文的问题

作者&投稿:夙莉 (若有异议请与网页底部的电邮联系)
java socket通信中传输报文的问题~

xml肯定不是了,dns肯定是个二进制的报文,报文RFC1035规定好的,不需要你自己设计定义,你需要按照他的协议自己分包和组包

看 Oracle 官方教程,同步式的 Socket 就是传统的一问一答方式,它就是你需要的。
客户端先 socket.getOutputStream().write(...); 之后到 socket.getInputStream().read(byte[]) 在循环中读取直到 read 方法返回 -1 或你期望的字节数已经全部收到了就停下来,如果不尝试停下来,后面的 read 将会阻塞等待。

http://docs.oracle.com/javase/tutorial/networking/sockets/index.html

基于性能改进,一般我们需要使用 NIO 异步的 socket,只需要一个线程负责通信,每个线程都有自己的出站消息队列和入站消息队列,以线程为 key 区分开,通信线程只负责把各自的消息从出站队列中发送去并把收到的消息放入入站队列中,应用程序线程就去各自的消息队列中取消息就可以了。因为每个应用线程有各自的消息队列,我们把消息放入出站队列之后就到入站队列上用同步锁等待的方法阻塞到有消息回答时为止。

关于 NIO non-blocking 非阻塞式 socket,下面有一个 NBTimeServer 例子,它讲的是服务端。客户端与此类似,
http://docs.oracle.com/javase/7/docs/technotes/guides/io/example/index.html

NIO 通信线程样例。

public void run() { int tip = 0; try { selector = Selector.open(); SelectionKey k = channel.register(selector, getInterestOptions()); k.attach(thread); // 把当前线程绑定到附件中。 this.running = true; statusChanged(Status.CONNECTED); while (this.isRunning()) { // select() is a blocking operation. int eventCount = selector.select(); debug("[MC.Debug] Polling TCP events ... " + eventCount); if (eventCount > 0 && channel.isOpen() && this.isRunning()) { Set keys = selector.selectedKeys(); for (Iterator iter = keys.iterator(); iter.hasNext(); iter.remove()) { SelectionKey key = (SelectionKey) iter.next(); Thread thread = (Thread) key.attachment(); if (!key.isValid()) { // channel is closing. break; } process(key); // 处理读取消息并把消息放入 thread 对应的队列。//写出消息类似的,不过在 register 时需要注册写出允许的事件, } } } }

一次性读取是不可靠的,一般是定义一个字节数组,用一个循环读取。然后再把读到的数据加起来。主要代码:

InputStream in=null;//你的socket对应的接收流
ByteArrayOutputStream bo=new ByteArrayOutputStream();//用来暂时存放接收到的数据的字节数组流
byte b[]=new byte[100];

int length=0;
while((length=in.read(b))!=-1)
{
bo.write(b,0,length);
}
byte ba[]=bo.toByteArray();
System.out.println(new String(ba));//这里要注意编码,根据实际情况有所变化,不然可能会有乱码
bo.close();
in.close();


AVA:为什么我引怪不停的按X9被说是检测到开挂或开非法程序被弹出来了...
TX自己太神经。LZ不用管它,我也碰见过。只要你没开G。就不会有事,官网上都说了。没事的。

AVA逃脱杀小兵加游戏人生的杀敌数吗?
不算的,生存频道里面的(防御,逃脱,拯救,回合)杀敌死亡数都不算上个人战绩的。不然你想想,杀上百最多死上那么两三次,S\/D不是要吓死人?就跟CF里的生化模式差不多,以后可能会单独计算.

ava枪的稳定性和准确度哪个重要?
精准度! 稳定性要是没有了,精准度会下降一点,但是枪法好的话,还是无所谓的

AVA各爆破地图的阴人点!狙击点。。。详细点。。有分加
在一个点阴人,最多杀1个,后面的人就知道你的位置了,打爆破战术跑位,地图要会看,不然那里死了人出了漏洞,从后面插出2,3个人,就全报销了,玩的时间长了就能打好爆破了

SA58 Para在AVA中的设计是否忠实于现实中的伞兵型FN FAL?
在游戏AVA中的SA58 Para自动步枪,与现实世界中的SA58存在一定的差异。SA58在游戏中被设计为伞兵型,具备了FN FAL公制型号的全自动射击功能,这样的改动在现实中虽然理论上是可能的,但针对民用市场的此类改进型号,由于法规限制,几乎不可能大规模生产和销售,通常仅限于执法机构和军方的零星采购或个人改装...

AVA买STG44还是HK416?玩过的请回答
几乎所有用过STG44的人 都会一个字的感慨... 稳 !HK416 在操作上 肯定比STG44困难多了 看楼主你了 只能这么说 你用STG44 战斗力绝对不会掉 而HK416 就不知道了 用好了牛 用不好 杀不死人.

ava特殊装备是永久的吗?
不是的。是90天的期限。到期后还是要交钱的。特殊装备里的武器都不咋样,而且是抽奖的,几率低得要命。还不如不抽。望采纳~~祝楼主游戏愉快~~

ava里看人是透明的,只能看见枪
网络延迟丢帧的,就是传输中丢包了

给点游戏AVA的资料
A.V.A online 游戏名称:A.V.A 游戏类型:FPS射击 游戏特征:射击游戏 开发公司:韩国Redduck公司 运营公司:腾讯 国内交流网站:http:\/\/www.fpswy.com 韩服官方网站:www.pmang.com 国服官方网站:http:\/\/ava.qq.com\/ 目前状况:韩服公测 2006年11月20日,韩国Redduck公司正在开发中的FPS游戏《...

ava这次更新不知道会更新多久!会不会像上次的长廊一样久!
楼主您好 因为生化需要跟新很多的人物和场景地图。所以跟新包也不会小的。因该在500到800M左右、逝 去。为您解答。如有疑问请继续追问。我会在收到的第一时间为您解答。

贵南县18092621426: 用JAVA写一个SOCKET 接收TCP发来的消息 -
宰昌里亚: 服务端监听:ServerSocket server=new ServerSocket(port);//port:绑定的端口号Socket client=server.accept()();//监听端口,一旦取得连接则获得客户端的socket连接对象client客户端: Socket s=new Socket(ip,port);//要连接的服务器的ip以及端口号如果正常连接上之后,socket的对象可以获得InputStream和OutputStreame,然后就可以进行通信了完成通信之后,执行socket对象的close()方法关闭连接,完成一次完整的socket连接

贵南县18092621426: socket怎么用java实现客户端之间的通信 -
宰昌里亚: 请在知道上面的搜索栏输入 java socket 例子 并回车

贵南县18092621426: java 简单的socket通信 -
宰昌里亚: 最简单的就是将dins.readUTF()方法换成dins.readLine(),出错的原因是到达流的末尾导致的意外终止.你会发现readLine()方法已经是废弃方法,不建议使用了.比较常规的方法是使用 BufferedReader br= new BufferedReader(new InputStreamReader(ins)); 来替代DataInputStream 祝你好运!

贵南县18092621426: 利用Java编写一个程序利用Socket和ServerSocket类,实现网络的点对点文件传输 -
宰昌里亚: 客户端代码:package net; import java.net.*; import java.io.*; public class Client { private Socket clientEndPoint; private InputStream in; private OutputStream out; public void connectToService() throws IOException, InterruptedException { ...

贵南县18092621426: java中的socket是什么意思? -
宰昌里亚: socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求.-----J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中.ServerSocket用于服务器端,...

贵南县18092621426: 如何使用java的socket向服务端发送十六进制字符串? -
宰昌里亚: 短小精悍,必对!1,首先将你的16进制的数据,转化成byte[],然后发送2,获得数据,然后将byte[]的东西转化成String,int等你可以看清的进行显示

贵南县18092621426: java编程中,Socket通信是怎么实现的? -
宰昌里亚: java编程对于Socket之间的通信过程如下:服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容.Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的...

贵南县18092621426: 在java中如何用Socket 进行 服务器端和客户端交互的,具体一点. -
宰昌里亚: 打横杠是因为那个方法已经过时了现在已经不怎么用了...Socket 服务器: 1先创建 ServerSocket ss = new ServerSocket(端口号) 2 接收请求 Socket s = ss.accept() 3接收消息 先读后写BufferedReader in = new BufferedReader( new ...

贵南县18092621426: 利用JAVA进行SOCKET通信时,如何在第一次运行客户端时,需要输入服务器的IP,以后都不用输入了. -
宰昌里亚: 好久没碰java了,但是你应该可以通过程序首先获得本机ip这样把ip保存到一个变量里,每台机子都会去获得ip这样应该就不为空了.

贵南县18092621426: java用socket写的服务器和客户端要如何测试啊?客户端的连接是的ip有什么是本机IP么? -
宰昌里亚: 你好,其实测试的时候就用本机地址127.0.0.1进行就可以了,服务器和客户端都用一个IP,但端口不同,一般服务器端是固定端口,而多个客户端用其他的多个端口进行连接.当然你想模拟更真实的效果,又没有多台机器,可以搭建虚拟机,比如vmware,把客户端或服务器放到虚拟机里去.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网