1、客户端和服务器端的交互
接收线程
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class ReviceThread implements Runnable{
Socket socket;
public ReviceThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
OutputStream out = socket.getOutputStream();
DataOutputStream dout = new DataOutputStream(out);
Scanner sc = new Scanner(System.in);
while (true) {
String msg = sc.next();
dout.writeUTF(msg);
if (msg.equals("0")) {
System.out.println("消息终止!");
break;
}
System.out.println("来自客户端的信息:" + socket.getRemoteSocketAddress() + " " + msg);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
发送线程
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class SendThread implements Runnable{
Socket socket;
public SendThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
InputStream in = null;
try {
in = socket.getInputStream();
DataInputStream din = new DataInputStream(in);
Scanner sc = new Scanner(System.in);
while (true){
sc.next();
String msg = din.readUTF();
if(msg.equals("0")){
System.out.println("消息终止!");
break;
}
System.out.println("来自客户端的信息:" + socket.getRemoteSocketAddress() + " " + msg);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = null;
socket = new Socket("127.0.0.1", 9999);
SendThread sendThread = new SendThread(socket);
Thread th2 = new Thread(sendThread,"服务器端");
th2.start();
ReviceThread reviceThread = new ReviceThread(socket);
Thread th1 = new Thread(reviceThread,"服务器端");
th1.start();
}
}
服务器端
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serversocket = new ServerSocket(10002);
Socket socket = serversocket.accept();
ReviceThread reviceThread = new ReviceThread(socket);
Thread th1 = new Thread(reviceThread,"服务器端");
th1.start();
SendThread sendThread = new SendThread(socket);
Thread th2 = new Thread(sendThread,"服务器端");
th2.start();
}
}
2、简单的龟兔赛跑
public class MatchThread implements Runnable{
int t = 0;//定义共享变量
@Override
public void run() {
int i = 0;
while(true){
synchronized (this){
if(i == 100 && t == 0){
System.out.println(Thread.currentThread().getName() + "赢!");
t = 1;
break;
}
}
i++;
if(i > 100){
break;
}
}
}
}
public class MatchTest {
public static void main(String[] args) {
MatchThread match = new MatchThread();
Thread turtle = new Thread(match,"乌龟");
Thread rabbit = new Thread(match,"兔子");
turtle.start();
rabbit.start();
}
}
3、