java如何用socket接受和发送数组
1、socket传送数据都是用输入输出流来实现的,怎么传送你可以在发送端以固定的长度传送,比如 byte[1024],只要在接收端也以这个长度接受就可以还原数据了。
2、socket发送的是流,所以必须将byte[]转换成流的形式,之后才可以发送的。
3、可以直接传字符串,也可以将字符串数组封装对象进行传输。
java中的ServerSocket可以接受WebDav数据包吗?
java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。这是两个封装得非常好的类,使用很方便。
在 Java Socket 网络编程中,服务器使用 ServerSocket 来侦听传入的客户端连接。
JAVA 有两个基于数据流的套接字类:ServerSocket,服务器用它“侦听”进入的连接;Socket,客户端用它初始一次连接。侦听套接字只能接收新的 连接请求,不能接收实际的数据包,即ServerSocket不能接收实际的数据包。
本答案提交时间:2011-6-12 17:17 Java 和其它语言之间进行Socket通信使用Socket和ServerSocket类。用JAVA编写server,C语言编写Client,当然可以实现通信(示例在最后)。Socket和ServerSocket类库位于java.net包中。
请教大家JAVA——socket接收的数据(byte[])的处理
1、socket传送数据都是用输入输出流来实现的,怎么传送你可以在发送端以固定的长度传送,比如 byte[1024],只要在接收端也以这个长度接受就可以还原数据了。
2、这个是个伪命题,socket可以发送数组,但只能是byte数组,所有的String,或者别的什么都必须转换为byte数组才可能发送。所以如果你是byte数组,直接send就可以了。
3、数据传输就两种,byte字节流,char字符流。
4、因为inputStream.read(byte)是尽可能的读byte[]大小的数据,当你的服务端发送数据速度大于客户端读取数据的速度时,就会出现客户端读到多帧连在一起的报文。而这些发送数据,读取数据的速度是未知的。
5、方法一:定义一个MsgObject的消息类,里面存放的为发送的消息内容(记得序列化)。然后再用ObjectOutputStream来把该类弄成一个输出流发送出去。
6、使用System.in.read()一次获取一个字节 输入再多数据,只会获取第一个字节的int形式。
java中Socket如何实现数据包传输的打包和解包?
1、长度”部分可能是乱码,因而引起后面数据的访问越界。比较科学的做法就是为payload数据增加包头(包括前导码、数据描述)和包尾(包校验码),通过一系列的校验,首先验证包的数据是正常的,然后再从包中吧数据解析出来。
2、socket粘包是避免不了的,主要在于接收方如何解包和控制。处理方法:定制socket传输协议。增加包头、命令、数据长度、数据体、结束位。
3、一般都先设定一个组包协议。组包和解包都按这个协议进行。就能准确的获取到数据内容。
4、我想 Socket 通信方面你应该没问题吧。是不知道怎样打包图片?其实不是打包,而是转换为二进制流。得到一个字节数组。传递给服务器端。
5、你做聊天的程序呢?如果是客服端同时在线才通信的话,就可以用服务器维护一个表;如果不在线也可以的话,那就根据ip地址创建文件夹之类的在服务器上;等另外一个客服端来了,就把文件内容读出来发出去就可以了。
java的socket数据接收问题
先把你的业务代码注释掉,直接打印接收到的数据看看,有没有可能是客户端两次的数据合并了,还有可能是业务代码太慢,导致第三次把第二次的给覆盖了,第四次的被第五次的给覆盖了。
这个首先要排除程序上的逻辑错误,如果减少了压力是否还有这种现象呢?如果程序没有问题简单的办法就是在服务端校验数据长度,如果长度错误则返回错误代码给客户端要求客户端重新发送消息。
先运行Receiver,再运行Sender。
java中socket不断接收数据问题
这个需要多线程的支持,就是你的客户端一单连接到你的服务端,你的服务端必须开启一个单独的socket线程。并保持此服务端不关闭从客户端接受的socket。
具体原因不大清楚,我想可能是这样,你在每次进入循环都生成一个新的流对象,这个流对象在销毁回收的时候可能对socket的输出流产生了某种影响吧。
这个首先要排除程序上的逻辑错误,如果减少了压力是否还有这种现象呢?如果程序没有问题简单的办法就是在服务端校验数据长度,如果长度错误则返回错误代码给客户端要求客户端重新发送消息。
监听你系统通信所用的端口,有数据就获取显示就可以了。