Java网络编程时出现java.io.DataInputStream.readInt(Unknown Source),且输出的数据乱码。
为了可以传送int型的数据,用的DataOutputStream类来传送,接收端用的是num = dis.readInt()
一直乱码,原因是发送端未使用dos.writeInt(num)
。
正确代码如下:
接收端
package network;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Host {
public static void main(String[] args) throws IOException {
//1:创建服务器的套接字
ServerSocket ss = new ServerSocket(10010);
//2:监听客户端的套接字,并且返回客户端的套接字
Socket s = ss.accept(); //阻塞式方法
//3:获取输入流
InputStream is = s.getInputStream();
//4:读取数据
DataInputStream dis = new DataInputStream(is);
int num = 0;
while((num = dis.readInt()) != -1){
System.out.println(num);
}
//5:关闭套接字
System.out.println("接收完成");
s.close();
}
}
发送端
package network;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class Guest {
public static void main(String[] args) throws IOException {
String host = "172.16.12.21";
int port = 10010;
Socket s = new Socket(host,port);
OutputStream os = s.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
for(int i = 1; i < 1024; i++) {
dos.writeInt(i);
}
System.out.println("发送完毕,关闭客户端服务。");
s.close();
}
}