当前位置:首页 » 编程语言 » javasocket接收

javasocket接收

发布时间: 2023-01-21 14:38:01

java socket发送和接收多条数据的情况怎么解决

只要是接收端
你都应该不停的等待消息
,接受消息的那一段可以这样写
while(true)
{
try{
Thread.sleep(300);}catch(Excepion
e){}
//注意这里的inStream是DataInputStream
当然你也可以加以装饰
String
message=
inStream.readUTF();
if(message!=null)
{
System.out.println("收到消息:"+message);
}
}
只有这样才能不断从发送端收到消息,这段代码只是给你一个提示,有问题给我留言,通常为了程序的合理性
最好把这段代码写进一个线程里面,这样更合理

② Java Socket开发 关于报文传递和接收

看 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 通信线程样例。

publicvoidrun()
{
inttip=0;
try
{
selector=Selector.open();
SelectionKeyk=channel.register(selector,getInterestOptions());
k.attach(thread);//把当前线程绑定到附件中。

this.running=true;
statusChanged(Status.CONNECTED);
while(this.isRunning())
{
//select()isablockingoperation.
inteventCount=selector.select();
debug("[MC.Debug]PollingTCPevents..."+eventCount);
if(eventCount>0&&channel.isOpen()&&this.isRunning())
{
Setkeys=selector.selectedKeys();
for(Iteratoriter=keys.iterator();iter.hasNext();iter.remove())
{
SelectionKeykey=(SelectionKey)iter.next();
Threadthread=(Thread)key.attachment();

if(!key.isValid())
{//channelisclosing.
break;
}
process(key);//处理读取消息并把消息放入thread对应的队列。//写出消息类似的,不过在register时需要注册写出允许的事件,

}
}
}
}

③ 用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连接

热点内容
solidworkspcb服务器地址 发布:2025-07-18 22:50:35 浏览:815
怎么在堆叠交换机里配置vlan 发布:2025-07-18 22:42:35 浏览:624
java调用别人的接口 发布:2025-07-18 22:37:35 浏览:434
服务器四个节点如何联网 发布:2025-07-18 22:36:02 浏览:272
华强北什么地方休安卓手机 发布:2025-07-18 22:24:56 浏览:736
数据库的根本目标 发布:2025-07-18 21:37:50 浏览:939
压缩机的流速 发布:2025-07-18 21:37:40 浏览:407
三星怎么取消手机密码 发布:2025-07-18 21:33:50 浏览:630
安卓手机耳机如何弹窗显示电量 发布:2025-07-18 21:20:53 浏览:60
云服务器搭建需要什么工具 发布:2025-07-18 20:51:08 浏览:322