
package Karl.Demo.Test;
import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) throws Exception {
//1.创建Sockrt对象,并同时请求与服务端程序连接
Socket socket=new Socket("127.0.0.1",8888);
//得到字节输出流,用来发送给服务端
OutputStream os=socket.getOutputStream();
//把低级字节输出流包装成数据输出流
DataOutputStream dos=new DataOutputStream(os);
Scanner sc=new Scanner(System.in);
System.out.println("----------客户端开启---------");
while (true) {
System.out.println("请输入:");
String msg = sc.nextLine();
//用户输入exit,就退出客户端
if ("exit".equals(msg)) {
System.out.println("-------退出-------");
dos.close();
socket.close();
break;
}
//开始写数据出去
dos.writeUTF(msg);
dos.flush();
}
}
}
package Karl.Demo.Test;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws Exception {
System.out.println("----------服务端启动------------");
//1.创建ServerSocket对象,同时为服务器注册端口
ServerSocket serverSocket=new ServerSocket(8888);
while (true) {
//2.使用serversocket对象,调用accept方法,等待客户端连接请求
Socket socket=serverSocket.accept();
//获取IP地址
System.out.println(socket.getRemoteSocketAddress()+"---------上线---------");
//3.把这个客户端对应的socket通信管道,交给一个独立的线程负责处理
new ServerRraderThread(socket).start();
}
}
}
package Karl.Demo.Test;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
public class ServerRraderThread extends Thread{
//定义一个socket
private Socket socket;
//定义一个有参构造器,把获取来的数据交给本接口的socket
public ServerRraderThread(Socket socket){
this.socket=socket;
}
//重写run方法
@Override
public void run() {
try {
//用本接口socket获取到的数据交给字节输入流is
InputStream is=socket.getInputStream();
//把低级字节输入流is包装成数据输入流dis
DataInputStream dis=new DataInputStream(is);
//把读取数据放入死循环
while (true) {
try {
//用数据输入流方法读取数据交给String定义的msg
String msg=dis.readUTF();
//打印
System.out.println(msg);
} catch (IOException e) {
//获取关闭服务器的IP
System.out.println(socket.getRemoteSocketAddress()+"-------离线-----");
//释放资源
socket.close();
dis.close();
break;
}
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}