import java.io.DataInputStream;
创新互联建站专注于义马网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供义马营销型网站建设,义马网站制作、义马网页设计、义马网站官网定制、微信小程序定制开发服务,打造义马网络公司原创品牌,更为您提供义马网站排名全网营销落地服务。
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketTest {
public static void main(String[] args) {
new ServerThread().start();
new ClientThread().start();
}
private static class ServerThread extends Thread {
private InputStream inputStream;
private OutputStream outputStream;
public void run() {
try {
initServer();
doServer();
} catch (IOException e) {
e.printStackTrace();
} finally {
closeServer();
}
}
private void initServer() throws IOException {
ServerSocket socket = new ServerSocket(8899);
Socket accept = socket.accept();
inputStream = accept.getInputStream();
}
private void doServer() throws IOException {
DataInputStream dis = new DataInputStream(inputStream);
while (dis.available() 0) {
System.out.println(dis.readInt());
}
}
private void closeServer() {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private static class ClientThread extends Thread {
private InputStream inputStream;
private OutputStream outputStream;
public void run() {
try {
initClient();
doClient();
} catch (IOException e) {
e.printStackTrace();
} finally {
closeClient();
}
}
private void initClient() throws IOException {
Socket socket = new Socket("localhost", 8899);
outputStream = socket.getOutputStream();
}
private void doClient() throws IOException {
DataOutputStream dos = new DataOutputStream(outputStream);
dos.writeInt(10000);
dos.writeInt(10001);
dos.writeInt(10002);
dos.flush();
}
private void closeClient() {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
发送就是像流中写入16进制数据,java中用byte[]数组表示,至于数组怎么存放数据要看接受端的要求了,这就要协议来控制,比如数据开头是什么,数据长度,校验位什么的。发数据要看接受端,两端需要统一,不能随便发送。读写数据很简单,关键是处理分析数据,调试最难了,有时候还会遇到数据大小端不一致,数据解析乱码。
println和 print的区别 还是参照javadoc比较准确,就是最后是否跟上一个换行。这种函数含义的解释,查手册是最准确的。
s.getOutputStream() 返回的结果 直接就是 OutputStream 这个类本身就是用于发送 byte[]的。
字符串转化成 byte[] 直接调用getBytes。
LZ应该详细阅读java手册。对于已经接触到的类 比如String,这种基本的,要看看它所有的函数实现。这就和学英语背单词一样,必须要有量的上去才行。