引言
什么是程序 ?
一个程序可以有多个进程 。程序是一段静态的代码,它是应用程序执行的蓝本。
什么是进程 ?
一个进程可以有多线程 进程是指一种正在运行的程序,有自己的地址空间。 作为蓝本的程序可以被多次加载到系统的不同内存区域分别执行,形成不同的进程。
基于进程的特点是允许计算机同时运行两个或更多的程序。
什么是线程 ?
线程是进程内部单一的一个顺序控制流。 一个进程在执行过程中,可以产生多个线 程。每个线程也有自己产生、存在和消亡的过程。
一,写一个类用来发给送消息
示例代码:
public class MyWriter implements Runnable {
private Socket s;
String msg;
private PrintWriter os;
public MyWriter(Socket s, String msg) {
this.s = s;
this.msg=msg;
try {
this.os = new PrintWriter(this.s.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
}
public MyWriter() {
}
public Socket getS() {
return s;
}
public void setS(Socket s) {
this.s = s;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
@Override
public void run() {
while (true) {
Scanner scan = new Scanner(System.in);
os.printf("%s:%s", msg, scan.nextLine() + "\r\n");
os.flush();
}
}
}
二,写一个类用来接收消息
示例代码:
public class MyReader implements Runnable {
private Socket s;
String msg;
public MyReader(Socket s) {
this.s = s;
try {
this.br = new BufferedReader(new InputStreamReader(s.getInputStream()));
} catch (Exception e) {
e.printStackTrace();
}
}
public Socket getS() {
return s;
}
public void setS(Socket s) {
this.s = s;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public MyReader() {
}
private BufferedReader br;
@Override
public void run() {
while (true) {
try {
System.out.println(this.br.readLine() + "\r\n");
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
三,实例化服务器类
示例代码:
public class MySever {
public static void main(String[] args) {
try {
ServerSocket s=new ServerSocket(8888);
Socket ss=s.accept();
Runnable ruw = new MyWriter(ss,"sever");
Thread thw = new Thread(ruw);
Runnable rur = new MyReader(ss);
Thread thr = new Thread(rur);
thw.start();
thr.start();
}catch (Exception e){
e.printStackTrace();
}
}
}
四,实例化客户端类
示例代码:
public class MyClient {
public static void main(String[] args) {
try {
Socket c=new Socket("192.168.21.37",8888);
Runnable ruw = new MyWriter(c,"client");
Thread thw = new Thread(ruw);
Runnable rur = new MyReader(c);
Thread thr = new Thread(rur);
thw.start();
thr.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
五,项目结果