A. linux用java socket与c的socket通信乱码问题
应该就是字符集问题。
首先要确定Linux返回的数据中,采用了那种编码方式,如:GBK。
对应的,在Java一端,将字符串信息转换成byte数组并写入Socket,读出的数据也转换成字符串,
如:
String s = "中文" ;
sockoutputstream.write (s.getBytes ("GBK")) ;
读出来时候,
byte [] buf = sockinputStream.read ()
String s = new String (buf, "GBK") ;
这样就可以了。
B. java socket编程与byte
数据传输本来就是用byte传输 的,跟硬件没有关系,比如你上传文件一样是使用byte好吧。关于byte中高位在前,低位在后的 不是很明白你说的意思
C. java socket输入流inputStream.read(byte[])方法一次读入多帧数据,也就是多帧数据连在一起
因为inputStream.read(byte)是尽可能的读byte[]大小的数据,当你的服务端发送数据速度大于客户端读取数据的速度时,就会出现客户端读到多帧连在一起的报文。而这些发送数据,读取数据的速度是未知的。所以我们需要人为的来做一些调整。比如说每一帧作为一行写入Socket,客户端每次从socket读取一行。这样客户端每次都是读取一帧。
以上情况可以这样实现:在服务端使用PrintWriter
PrintWriterwriter=newPrintWriter(socket.getOutputStream());
writer.println(data);
客户端可以使用BufferedReader
BufferedReaderreader=newBufferedReader(newBufferedInputStream(socket.getInputStream()));
Strings=reader.readLine();
D. java为什么在网络传输中socket.read()返回1代表读取完,以前都是返回-1代表读取完的
socket.read()的结果是读取的byte长度,1的话表示读了一个byte,不是结束。-1才表示结束
E. java 用 socket 直接接收Byte[] 和发送数组 的程序
socket传送数据都是用输入输出流来实现的,怎么传送你可以在发送端以固定的长度传送,比如
byte[1024],只要在接收端也以这个长度接受就可以还原数据了。
F. java中的socket通信,怎么发送一个byte[]数组
socket发送的是流,所以必须将byte[]转换成流的形式,之后才可以发送的。创建socket后可以通过下面的方法实现发送:
PrintWriter pw = null;
pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter( socket.getOutputStream()))); //创建一个输入流,之后这个流的指向是socket
pw.write(request.toString()); //写入要输入的Byte[],转换为字符串,之后进行传送
pw.close();//传送完毕,关闭流
G. java 使用socket编程,读出7个字节的流,如何转化为日期格式
算是一种畸形的日期格式了,用十六进制数记录日期。效率不高
public class Test {
static public String decodeWeirdDate(final byte a[]){
StringBuffer buf=new StringBuffer();
for(byte b:a)
buf.append(String.format("%02X",b));
return buf.toString();
}
public static void main(String[] args){
byte []a={32, 18, 7, 5, 0, 64, 69};
System.out.println(decodeWeirdDate(a));
}
}
=======
20120705004045