/*
时间:2015年3月14日18:12:02
测试的仍然是ServerSocket和Socket,不过本次着重理解一下关于流的知识。
DataInputStream的构造方法如下:
public DataInputStream(InputStream in)
使用指定的底层 InputStream 创建一个 DataInputStream。
是一个处理流。
public final boolean readBoolean()
throws IOException
public final String readUTF()
throws IOException、
public final int read(byte[] b)
throws IOException从包含的输入流中读取一定数量的字节,
并将它们存储到缓冲区数组 b 中。
以整数形式返回实际读取的字节数。
在输入数据可用、检测到文件末尾 (end of file) 或抛出异常之前,
此方法将一直阻塞。
public final int read(byte[] b,int off,int len)throws IOException;
从包含的输入流中将最多 len 个字节读入一个 byte 数组中。
尽量读取 len 个字节,但读取的字节数可能少于 len 个,也可能为零。
以整数形式返回实际读取的字节数。
在输入数据可用、检测到文件末尾或抛出异常之前,此方法将阻塞。
DataOutputStream类中均有相应的构造方法和普通方法。
由于在这两个类中有基类中没有的方法,也就是具有新增方法,
因此在创建该类型的对象的时候如果想要使用相应的写入或者读出基本数据类型的时候,
必须声明为DataInputStram和DataOutputStream类型。而不能使用多态的特性声明
为InputStream和OutputStream类型。
时间:2015年3月14日18:12:02
测试的仍然是ServerSocket和Socket,不过本次着重理解一下关于流的知识。
DataInputStream的构造方法如下:
public DataInputStream(InputStream in)
使用指定的底层 InputStream 创建一个 DataInputStream。
是一个处理流。
public final boolean readBoolean()
throws IOException
public final String readUTF()
throws IOException、
public final int read(byte[] b)
throws IOException从包含的输入流中读取一定数量的字节,
并将它们存储到缓冲区数组 b 中。
以整数形式返回实际读取的字节数。
在输入数据可用、检测到文件末尾 (end of file) 或抛出异常之前,
此方法将一直阻塞。
public final int read(byte[] b,int off,int len)throws IOException;
从包含的输入流中将最多 len 个字节读入一个 byte 数组中。
尽量读取 len 个字节,但读取的字节数可能少于 len 个,也可能为零。
以整数形式返回实际读取的字节数。
在输入数据可用、检测到文件末尾或抛出异常之前,此方法将阻塞。
DataOutputStream类中均有相应的构造方法和普通方法。
由于在这两个类中有基类中没有的方法,也就是具有新增方法,
因此在创建该类型的对象的时候如果想要使用相应的写入或者读出基本数据类型的时候,
必须声明为DataInputStram和DataOutputStream类型。而不能使用多态的特性声明
为InputStream和OutputStream类型。
*/
import java.net.*;
import java.io.*;
import java.net.*;
import java.io.*;
public class TestSockServer {
public static void main(String[] args) {
InputStream in = null;
OutputStream os = null;
DataInputStream dis = null;
DataOutputStream dos = null;
String str = null;
char ch;
int i;
double d;
boolean b;
try {
ServerSocket ss = new ServerSocket(6666);
Socket server = ss.accept();
in = server.getInputStream();
dis = new DataInputStream(in);
os = server.getOutputStream();
dos = new DataOutputStream(os);
if ((str = dis.readUTF()) != null) {
System.out.println(str);
System.out.println("from " + server.getInetAddress());
System.out.println("LocalPort " + server.getLocalPort());
System.out.println("port " + server.getPort());
}
ch = dis.readChar();
b = dis.readBoolean();
i = dis.readInt();
d = dis.readDouble();
System.out.println("Server ");
System.out.println("=======================");
System.out.println("ch = " + ch);
System.out.println("b = " + b);
System.out.println("i = " + i);
System.out.println("d = " + d);
System.out.println("=======================");
dos.writeUTF("不不不,client是帅哥!");
dos.writeChar('A');
dos.writeBoolean(true);
dos.writeInt(20);
dos.writeDouble(2.43);
dos.close();
os.close();
dis.close();
in.close();
server.close();
} catch (IOException e) {
System.out.println("IO读写错误");
}
}
}
/*
public static void main(String[] args) {
InputStream in = null;
OutputStream os = null;
DataInputStream dis = null;
DataOutputStream dos = null;
String str = null;
char ch;
int i;
double d;
boolean b;
try {
ServerSocket ss = new ServerSocket(6666);
Socket server = ss.accept();
in = server.getInputStream();
dis = new DataInputStream(in);
os = server.getOutputStream();
dos = new DataOutputStream(os);
if ((str = dis.readUTF()) != null) {
System.out.println(str);
System.out.println("from " + server.getInetAddress());
System.out.println("LocalPort " + server.getLocalPort());
System.out.println("port " + server.getPort());
}
ch = dis.readChar();
b = dis.readBoolean();
i = dis.readInt();
d = dis.readDouble();
System.out.println("Server ");
System.out.println("=======================");
System.out.println("ch = " + ch);
System.out.println("b = " + b);
System.out.println("i = " + i);
System.out.println("d = " + d);
System.out.println("=======================");
dos.writeUTF("不不不,client是帅哥!");
dos.writeChar('A');
dos.writeBoolean(true);
dos.writeInt(20);
dos.writeDouble(2.43);
dos.close();
os.close();
dis.close();
in.close();
server.close();
} catch (IOException e) {
System.out.println("IO读写错误");
}
}
}
/*
D:\java\socket>java TestSockServer
server是帅哥!
from /127.0.0.1
port 33537
Server
=======================
ch = B
b = true
i = 20
d = 2.43
=======================
server是帅哥!
from /127.0.0.1
port 33537
Server
=======================
ch = B
b = true
i = 20
d = 2.43
=======================
D:\java\socket>java TestSockServer.java
错误: 找不到或无法加载主类 TestSockServer.java
错误: 找不到或无法加载主类 TestSockServer.java
D:\java\socket>javac TestSockServer.java
D:\java\socket>java TestSockServer
server是帅哥!
from /127.0.0.1
LocalPort 6666
port 33749
Server
=======================
ch = B
b = true
i = 20
d = 2.43
=======================
server是帅哥!
from /127.0.0.1
LocalPort 6666
port 33749
Server
=======================
ch = B
b = true
i = 20
d = 2.43
=======================
*/
/*
时间:2015年3月14日18:13:00
测试的仍然是ServerSocket和Socket,不过本次着重理解一下关于流的知识
在客户端,我们可以看到第一次的运行是有问题的,
(在本次运行中,该if语句若被删掉的执行结果为第一次)
这是因为DataInputStream和DataOutputStream这两个流在进行输出传输的时候,
严格按照字节进行的。也就是说,你用DataOutputStream往流中输入基本数据类型的数据时,
必须严格按照相应的次序使用DataInputStream读取相应的数据类型,一点都不能错。
但是由于第一次运行的时候没有if语句块,所以在由服务器端写到该套接字流中
“不不不,Client才是帅哥!”,并没有在客户端中读取,这样的话,在其后的读取中,
总是按照相应的数据类型读取一定的字节,并处理本想成为的数据类型,这当然不是
我们的意图。
*/
import java.net.*;
import java.io.*;
时间:2015年3月14日18:13:00
测试的仍然是ServerSocket和Socket,不过本次着重理解一下关于流的知识
在客户端,我们可以看到第一次的运行是有问题的,
(在本次运行中,该if语句若被删掉的执行结果为第一次)
这是因为DataInputStream和DataOutputStream这两个流在进行输出传输的时候,
严格按照字节进行的。也就是说,你用DataOutputStream往流中输入基本数据类型的数据时,
必须严格按照相应的次序使用DataInputStream读取相应的数据类型,一点都不能错。
但是由于第一次运行的时候没有if语句块,所以在由服务器端写到该套接字流中
“不不不,Client才是帅哥!”,并没有在客户端中读取,这样的话,在其后的读取中,
总是按照相应的数据类型读取一定的字节,并处理本想成为的数据类型,这当然不是
我们的意图。
*/
import java.net.*;
import java.io.*;
public class TestSockClient {
public static void main(String[] args) {
InputStream in = null;
OutputStream os = null;
DataInputStream dis = null;
DataOutputStream dos = null;
String str = null;
char ch;
int i;
double d;
boolean b;
try {
Socket client = new Socket("127.0.0.1", 6666);
in = client.getInputStream();
dis = new DataInputStream(in);
os = client.getOutputStream();
dos = new DataOutputStream(os);
dos.writeUTF("server是帅哥!");
dos.writeChar('B');
dos.writeBoolean(true);
dos.writeInt(20);
dos.writeDouble(2.43);
//该if语句若被删掉
if ((str = dis.readUTF()) != null) {
System.out.println(str);
System.out.println("from " + client.getInetAddress());
System.out.println("LocalPort " + client.getLocalPort());
System.out.println("port " + client.getPort());
}
ch = dis.readChar();
b = dis.readBoolean();
i = dis.readInt();
d = dis.readDouble();
System.out.println("Client ");
System.out.println("=======================");
System.out.println("ch = " + ch);
System.out.println("b = " + b);
System.out.println("i = " + i);
System.out.println("d = " + d);
System.out.println("=======================");
dos.close();
os.close();
dis.close();
in.close();
client.close();
}catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/*
public static void main(String[] args) {
InputStream in = null;
OutputStream os = null;
DataInputStream dis = null;
DataOutputStream dos = null;
String str = null;
char ch;
int i;
double d;
boolean b;
try {
Socket client = new Socket("127.0.0.1", 6666);
in = client.getInputStream();
dis = new DataInputStream(in);
os = client.getOutputStream();
dos = new DataOutputStream(os);
dos.writeUTF("server是帅哥!");
dos.writeChar('B');
dos.writeBoolean(true);
dos.writeInt(20);
dos.writeDouble(2.43);
//该if语句若被删掉
if ((str = dis.readUTF()) != null) {
System.out.println(str);
System.out.println("from " + client.getInetAddress());
System.out.println("LocalPort " + client.getLocalPort());
System.out.println("port " + client.getPort());
}
ch = dis.readChar();
b = dis.readBoolean();
i = dis.readInt();
d = dis.readDouble();
System.out.println("Client ");
System.out.println("=======================");
System.out.println("ch = " + ch);
System.out.println("b = " + b);
System.out.println("i = " + i);
System.out.println("d = " + d);
System.out.println("=======================");
dos.close();
os.close();
dis.close();
in.close();
client.close();
}catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/*
D:\java\socket>javac TestSockClient.java
D:\java\socket>java TestSockClient
Client
=======================
ch =
b = true
i = -1198660424
d = -9.710966054458669E-242
=======================
Client
=======================
ch =
b = true
i = -1198660424
d = -9.710966054458669E-242
=======================
D:\java\socket>javac TestSockClient.java
TestSockClient.java:34: 错误: 找不到符号
System.out.prinltn("LocalPort " + client.getLocalPort());
^
符号: 方法 prinltn(String)
位置: 类型为PrintStream的变量 out
1 个错误
TestSockClient.java:34: 错误: 找不到符号
System.out.prinltn("LocalPort " + client.getLocalPort());
^
符号: 方法 prinltn(String)
位置: 类型为PrintStream的变量 out
1 个错误
D:\java\socket>javac TestSockClient.java
D:\java\socket>java TestSockClient
不不不,client是帅哥!
from /127.0.0.1
LocalPort 33749
port 6666
Client
=======================
ch = A
b = true
i = 20
d = 2.43
=======================
*/
不不不,client是帅哥!
from /127.0.0.1
LocalPort 33749
port 6666
Client
=======================
ch = A
b = true
i = 20
d = 2.43
=======================
*/