https://blog.csdn.net/maslii/article/details/88550050
1、先创建java项目目录,名称MyTest。
mkdir MyTest
2、在项目中创建src和bin目录,src下用于存放 “.java” 文件,bin下存放 “ .class ” 文件。
cd MyTest
mkdir src bin
3、在src下创建包com.stu。
mkdir -p src/com/stu
4、在包中编写java文件,文件名为Hello.java。
vi src/com/stu/Hello.java
package com.stu; // 包名
public class Hello{
public static void main(String[] args){
System.out.println("Hello world");
}
}
// vim中编写,完成后保存退出。
没有vim所以我使用之前创建文件的方式。详情看在linux编译理解进程
5、在bin目录下创建用于存放MyTest项目中生成的class文件的目录。
mkdir bin/MyTest
6、编译java文件,将生成的编译文件存放在bin/MyTest下,其中的com/stu目录会自动创建,因为“package com.stu;”语句。“-d”表示指定生成class文件的位置。
javac ./src/com/stu/Hello.java -d ./bin/MyTest/
7、执行java文件。“-cp”表示classpath,后跟路径,创建的是什么就指定哪里,否则会报错。之后再指定包名.类名即可运行。
java -cp ./bin/MyTest/ com.stu.Hello
//客户端名字和包微调
package com.stu;
import java.net.*;
import java.io.*;
public class hellocli{
public static void main(String[] args){
try{
Socket sock=new Socket("127.0.0.1",6013);
InputStream in=sock.getInputStream();
BufferedReader bin=new BufferedReader(new InputStreamReader(in));
String line;
while((line=bin.readLine())!=null)
System.out.println(in.readLine());
sock.close();
}
catch(IOException ioe){
System.err.println(ioe);
}
}
}
//服务器端
package com.stu;
import java.net.*;
import java.io.*;
public class Hello{
public static void main(String[] args){
try{
ServerSocket sock=new ServerSocket(6013);
while (true){
Socket client=sock.accept();
PrintWriter pout=new PrintWriter(client.getOutputStream(),true);
pout.println(new java.util.Date().toString());
client.close();
}
}
catch(IOException ioe){
System.err.println(ioe);
}
}
}
服务器端。
client是一个套接字。printwriter不是很理解 应该是建立一个能把数据流包起来的什么东西可以允许用函数写到套接字。所以就能把日期写到套接字发给客户机。
然后客户端。sock套接字。in是输入流(看补充材料)BufferedReader不太理解,和readline一起把in得到的数据合理输出。
getInputStream与getOutputStream详解https://blog.csdn.net/fjcsdn/article/details/80633660
客户端上的使用
1.getInputStream方法可以得到一个输入流,客户端的Socket对象上的getInputStream方法得到输入流其实就是从服务器端发回的数据。
2.getOutputStream方法得到的是一个输出流,客户端的Socket对象上的getOutputStream方法得到的输出流其实就是发送给服务器端的数据。
服务器端上的使用
1.getInputStream方法得到的是一个输入流,服务端的Socket对象上的getInputStream方法得到的输入流其实就是从客户端发送给服务器端的数据流。
2.getOutputStream方法得到的是一个输出流,服务端的Socket对象上的getOutputStream方法得到的输出流其实就是发送给客户端的数据。
BufferedReader和BufferedWriter简介https://blog.csdn.net/qq_21808961/article/details/81561464
为了提高字符流读写的效率,引入了缓冲机制,进行字符批量的读写,提高了单个字符读写的效率。BufferedReader用于加快读取字符的速度,BufferedWriter用于加快写入的速度
BufferedReader和BufferedWriter类各拥有8192个字符的缓冲区。当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并放满缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取。如果缓冲区数据不足,才会再从文件中读取,使用BufferedWriter时,写入的数据并不会先输出到目的地,而是先存储至缓冲区中。如果缓冲区中的数据满了,才会一次对目的地进行写出。