- Socket
Socket又称“套接字”,应用程序通常通过“套接字”向网络发出请求或者应答网络模式。
Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络链接时使用的。在链接成功时,应用程序两端会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络链接来说,套接字是平等的,并没有差别,不因为在服务器端或者在客户端而产生不同级别。不管是Socket还是ServerSocket它们工作都是通过SocketImpl类及其子类完成的。
详细解释:
https://blog.csdn.net/songxinfeng1989/article/details/81027156
- Server
package com.mtlk.chat;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Server implements Runnable{
private ServerSocket ss;
private Socket s;
public Server() throws IOException {
ss = new ServerSocket(9000);
s = ss.accept();
new Thread(this).start();
receive();
}
private void receive() throws IOException {
}
@Override
public void run() {
try {
InputStream iStream = s.getInputStream();
Scanner scanner = new Scanner(iStream);
while(true) {
if(scanner.hasNextLine()) {
System.out.println("Client:" + scanner.nextLine());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
new Server();
}
}
- Client
package com.mtlk.chat;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
import javax.sound.midi.Receiver;
public class Client implements Runnable{
private Socket socket;
public Client() throws UnknownHostException, IOException {
socket = new Socket("127.0.0.1",9000);
new Thread(this).start();
receive();
}
private void receive() throws IOException {
Scanner scanner = new Scanner(System.in);
PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
while(true) {
String meString =scanner.next();
if(meString.equalsIgnoreCase("end")) {
System.out.println("系统退出");
return;
}
printWriter.print(meString);
printWriter.flush();
}
}
public static void main(String[] args) throws UnknownHostException, IOException {
new Client();
}
@Override
public void run() {
try {
InputStream inputStream = socket.getInputStream();
Scanner scanner = new Scanner(inputStream);
while(true) {
if(scanner.hasNextLine()) {
System.out.println("Client:" + scanner.nextLine());
}
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}