import sun.swing.UIAction;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
public class Main {
public static void main(String[] args) {
JFrame jf = new JFrame("socket通信");
jf.setSize(800, 400);
JPanel jp = new JPanel();
JButton jbServerCreate = new JButton("创建服务");
jp.add(jbServerCreate);
jbServerCreate.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
createServer();
}
});
JButton jbServerClose = new JButton("关闭服务");
jp.add(jbServerClose);
jbServerClose.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
closeServer();
}
});
JButton jbClientCreate = new JButton("创建客户端");
jp.add(jbClientCreate);
jbClientCreate.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
createClient();
}
});
JButton jbClientClose = new JButton("关闭客户端");
jp.add(jbClientClose);
jbClientClose.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
closeClient();
}
});
JButton jbSendFromClient = new JButton("发送数据到服务");
jp.add(jbSendFromClient);
jbServerClose.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
sendFromClient();
}
});
jf.add(jp);
// 设置窗口关闭时退出程序
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 显示窗口
jf.setVisible(true);
}
private static ServerSocket serverSocket = null;
private static boolean isServerRunning = true;
private static void createServer() {
isServerRunning = true;
try {
serverSocket = new ServerSocket(6666);
// serverSocket.bind(new InetSocketAddress("127.0.0.1", 6666));
System.out.println("创建了8088端口的服务器");
new Thread(new Runnable() {
@Override
public void run() {
Socket cs = null;
try {
cs = serverSocket.accept();
System.out.println("有新的连接请求,客户端地址" + cs.getInetAddress());
BufferedReader br = new BufferedReader(new InputStreamReader(cs.getInputStream()));
PrintWriter pw = new PrintWriter(cs.getOutputStream(), true);
while (isServerRunning) {
String line = br.readLine();
System.out.println("服务端收到客户端发送的数据:"+line);
pw.println(line+"_server");
pw.flush();
}
br.close();
pw.close();
cs.close();
serverSocket.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}).start();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void closeServer() {
isServerRunning = false;
}
private static Socket clientSocket = null;
private static void createClient() {
try {
clientSocket = new Socket("127.0.0.1", 6666);
clientSocket.setSoTimeout(3000);
// clientSocket.connect(new InetSocketAddress("127.0.0.1", 6666));
new Thread(new Runnable() {
@Override
public void run() {
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader userIn = new BufferedReader(new InputStreamReader(System.in));
while (isServerRunning) {
String message = userIn.readLine();
System.out.println("客户端收到服务端发送的数据:"+in.readLine());
out.println(message);
}
//一定要调用close服务端才会收到数据
in.close();
out.close();
userIn.close();
clientSocket.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}).start();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private static void closeClient() {
isServerRunning = false;
}
private static StringBuffer sb = new StringBuffer();
private static void sendFromClient() {
/*if (clientSocket != null && !clientSocket.isClosed()){
try {
clientSocket.getOutputStream().write(sb.append("hello world").toString().getBytes());
clientSocket.getOutputStream().flush();
} catch (IOException e) {
throw new RuntimeException(e);
}
}*/
}
}