第一步:建立一个服务器类
public class Server {
public static void main(String[] args) {
//启动服务器接收线程
ServerReceiver1 sr = new ServerReceiver1();
Thread t1 = new Thread(sr);
t1.start();
//启动服务器发送线程
ServerSend2 ss = new ServerSend2();
Thread t2 = new Thread(ss);
t2.start();
}
}
第二步:建立一个客户端的类
public class Client {
public static void main(String[] args) {
//启动客户端发送线程
ClientSend1 cs = new ClientSend1();
Thread t1 = new Thread(cs);
t1.start();
//启动客户端接收线程
ClientReceiver2 cr = new ClientReceiver2();
Thread t2 = new Thread(cr);
t2.start();
}
}
第三步:
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class ClientSend1 implements Runnable{
public void run(){
send();
}
public void send() {
//一.建立socket连接
//2.客户端申请连接
//只是申请连接 还没真正接通 相当于打电话拨号 对方不一定接
Socket s = null;
try {
s = new Socket("localhost",8888);
} catch (UnknownHostException e) {
System.out.println("找不到主机,连接失败");
e.printStackTrace();
} catch (IOException e) {
System.out.println("建立socket连接失败");
e.printStackTrace();
}
//二.I/O操作
//1.建立通道
OutputStream os = null;
try {
os = s.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
PrintWriter pw = new PrintWriter(os);
Scanner scanner = new Scanner(System.in);
System.out.println("---------client---------");
System.out.println("请输入您想说的话:");
String str = scanner.next();
//2.利用write写
pw.println(str);
pw.flush();
//---------------------一直说-----------------------
while(!str.equals("88")){
System.out.println("---------client---------");
System.out.println("请输入您想说的话:");
str = scanner.next();
//2.利用write写
pw.println(str);
pw.flush();
}
//3.关闭通道
//三.关闭socket连接
if(s!=null){
try {
s.close();
} catch (IOException e) {
System.out.println("关闭socket连接失败");
e.printStackTrace();
}
}
}
}
第四步:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
public class ClientReceiver2 implements Runnable{
public void run() {
receive();
}
public void receive(){
//一.建立socket连接
//2.客户端申请连接
//只是申请连接 还没真正接通 相当于打电话拨号 对方不一定接
Socket s = null;
try {
s = new Socket("localhost",9999);
} catch (UnknownHostException e) {
System.out.println("找不到主机,连接socket失败");
e.printStackTrace();
} catch (IOException e) {
System.out.println("建立socket连接失败");
e.printStackTrace();
}
//二.I/O操作
//1.建立通道
try {
InputStream os = s.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(os));
//2.利用read读
String message = br.readLine();
System.out.println("---------client---------");
System.out.println("服务器对您说:" + message);
//---------------------一直说-----------------------
while(!message.equals("88")){
message = br.readLine();
System.out.println("---------client---------");
System.out.println("服务器对您说:" + message);
}
} catch (IOException e) {
System.out.println("客户端读取数据失败");
e.printStackTrace();
}
//3.关闭通道
//三.关闭socket连接
if(s!=null){
try {
s.close();
} catch (IOException e) {
System.out.println("关闭socket失败");
e.printStackTrace();
}
}
}
}
第五步:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerReceiver1 implements Runnable{
public void receive(){
//一.建立socket连接
//1.新建ServerSocket
ServerSocket ss = null;
try {
ss = new ServerSocket(8888);
} catch (IOException e) {
System.out.println("重复的端口,请先关闭相应程序,再从新启动");
e.printStackTrace();
}
Socket socket = null;
try {
socket = ss.accept();
} catch (IOException e) {
e.printStackTrace();
}//阻塞式的 傻傻的等待 等待客户端申请连接
System.out.println("有一个客户端连接");
//二.I/O操作
//1.建立通道
try {
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
//2.利用read读
String message = br.readLine();
System.out.println("-------------Server---------");
System.out.println("客户端对你说:" + message);
while(!message.equals("88")){
//一直读
message = br.readLine();
System.out.println("-------------Server---------");
System.out.println("客户端对你说:" + message);
}
} catch (IOException e) {
System.out.println("服务器接收数据失败");
e.printStackTrace();
}
//3.关闭通道
}
public void run() {
receive();
}
}
第六步:
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class ServerSend2 implements Runnable{
public void send(){
//一.建立socket连接
//1.新建ServerSocket
ServerSocket ss = null;
try {
ss = new ServerSocket(9999);
} catch (IOException e) {
System.out.println("重复的端口,请先关闭相应程序,再从新启动服务器");
e.printStackTrace();
}
Socket socket = null;
try {
socket = ss.accept();
} catch (IOException e) {
System.out.println("建立socket连接失败");
e.printStackTrace();
}//阻塞式的 傻傻的等待 等待客户端申请连接
System.out.println("有一个客户端连接");
//二.I/O操作
//1.建立通道
OutputStream os = null;
try {
os = socket.getOutputStream();
} catch (IOException e) {
System.out.println("服务器端建立输出流失败");
e.printStackTrace();
}
PrintWriter pw = new PrintWriter(os);
//2.利用write写
System.out.println("-------------Server---------");
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您想说的话:");
String str = scanner.next();
pw.println(str);
pw.flush();
while(!str.equals("88")){
//一直写
System.out.println("-------------Server---------");
System.out.println("请输入您想说的话:");
str = scanner.next();
pw.println(str);
pw.flush();
}
//3.关闭通道
}
public void run() {
send();
}
}