Server端
package com.huizhi;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server extends PublicUi{
//private static Socket socket;
public static void main(String[] args) throws IOException, InterruptedException {
// TODO Auto-generated method stub
ServerSocket ss = new ServerSocket(10086);
Server server=new Server("服务端","server answer");
System.out.println("服务器正常启动。。。");
while(true){
Socket socket = ss.accept();
System.out.println("用户接入成功。。。");
/*
* 每次连接成功一个客户端,则启动一个线程为其服务
*/
ServerThread st1=new ServerThread(socket,server);
st1.start();
}
}
public Server(String a,String b){
super(a,b);
}
}
Server线程端- ServerThread
在这里插入代码片
package com.huizhi;
import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
public class ServerThread extends Thread {
private Socket socket;
private JTextArea ja;
private JTextField jf;
private JButton jb;
private PrintWriter pw;
private int inta;
public ServerThread(Socket socket,Server server) {
this.socket = socket;
this.ja=server.jTextArea;
this.jf=server.jTextField;
this.jb=server.jButton;
}
@Override
public void run() {
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
pw = new PrintWriter(new OutputStreamWriter(
socket.getOutputStream()));
this.jb.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if(inta==1&&!jf.getText().equals("")){
ja.append("我回复:"+jf.getText()+"\n");
pw.println(jf.getText());
pw.flush();
jf.setText("");
inta=0;
}
}
});
while (true) {
String string = br.readLine();
System.out.println("Server read = " + string);
System.out.println("Server端请输入: ");
ja.append(string+"\n");
inta=1;//标记为当前的socket对象
}
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
br.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
pw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
客户端
package com.huizhi;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
public class Client extends PublicUi{
private static Socket socket;
public static void main(String[] args) {
try {
socket=new Socket("127.0.0.1" ,10086);
} catch (IOException e) {
e.printStackTrace();
}
String strName="client"+Math.random();
Client client=new Client(strName,"i want to speak:");
try {
client.EventM(socket);
client.receiveTalk();
} catch (Exception e) {
e.printStackTrace();
}
}
Client(String a,String b){
super(a,b);
}
public void receiveTalk() {
BufferedReader br = null;
try {
br = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
while(true){
String str = null;
try {
str = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Client read = "+str);
jTextArea.append("服务器回复说:"+str+"\n");
}
}
}
公共界面类
package com.huizhi;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
public class PublicUi extends JFrame{
protected JTextField jTextField;
protected JTextArea jTextArea;
protected JButton jButton;
protected PrintWriter pw;
protected String a;
PublicUi(String a, String b){
this.a=a;
JLabel label=new JLabel(b);
jTextField=new JTextField(30);
jButton=new JButton("send");
jTextArea=new JTextArea(30,30);
jTextArea.setLineWrap(true);
FlowLayout flowLayout=new FlowLayout();
flowLayout.setAlignment(FlowLayout.LEFT);
this.setLayout(flowLayout);
this.add(label);
add(jTextField);
add(jButton);
add(jTextArea);
this.setTitle(a);
this.setVisible(true);
this.setBounds(30,30,400,600);
this.setResizable(false);
}
public void EventM(Socket socket){
try {
pw = new PrintWriter(
new OutputStreamWriter(
socket.getOutputStream()));
} catch (IOException e) {
e.printStackTrace();
}
jButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
String arg=jTextField.getText();
jTextArea.append("我说:"+arg+"\n");
if("exit".equals(arg.trim())){
pw.println("exit");
pw.flush();
}
pw.println(a+"说:"+arg);
pw.flush();
}
});
}
}