62,614
社区成员
发帖
与我相关
我的任务
分享
package com.sjd.socket;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
/**
* @param args
*/
//服务器
public static void main(String[] args) {
try {
ServerSocket server=new ServerSocket(30000);
while (true) {
Socket client = server.accept();
ServerThread.clientMap.put(client, null);
new ServerThread(client).start();
}
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
}
package com.sjd.socket;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class ServerThread extends Thread {
public static Map<Socket, Set> clientMap = new HashMap<Socket, Set>();
private Socket client;
public ServerThread(Socket client) {
super();
this.client = client;
}
@Override
public void run() {
try {
InputStream in = client.getInputStream();
OutputStream out = null;
while (true) {
// InputStream in=client.getInputStream();//放到循环外边去
byte[] b = new byte[1024];
int i = in.read(b, 0, b.length);
String messge = new String(b).trim() + "\r\n";// 补上回车换行。
Set<Socket> set = clientMap.keySet();
for (Socket soc : set) {
out = soc.getOutputStream();
byte[] bb = messge.getBytes();
out.write(bb, 0, bb.length);
out.flush();// 刷出
}
}
}
catch (IOException e) {
e.printStackTrace();
}
}
}
package com.sjd.socket;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
//import com.util.Util;
public class ClientUI {
private JFrame jf = null;
private JButton but = null;
private JTextArea showMessage = null;
private JTextArea inputMessage = null;
//
private Socket socket = null;
private String message;
BufferedReader br = null;
OutputStream out = null;
BufferedWriter bw = null;
InputStream is = null;
public ClientUI(){
join();
init();
//1.创建客户端套接字,向服务器发送请求
}
private void init(){
jf = new JFrame("MyFrame");
int width = 602,height = 445;
//jf.setBounds(Util.getsetWidthPosition(width), Util.getsetHeigthPosition(height), width, height);
jf.setBounds(0, 0, width, height);
jf.setLayout(new FlowLayout(FlowLayout.RIGHT));
jf.setResizable(false);
but = new JButton("发送");
showMessage = new JTextArea(16, 53);
showMessage.setEditable(false);//聊天记录不能被修改
showMessage.setLineWrap(true);//内容超出文本域长度自动换行
showMessage.setWrapStyleWord(true);//换行不断字
inputMessage = new JTextArea(4, 53);
inputMessage.setLineWrap(true);//内容超出文本域长度自动换行
inputMessage.setWrapStyleWord(true);//换行不断字
jf.add(new JScrollPane(showMessage));
jf.add(but);
jf.add(new JScrollPane(inputMessage));
myEvent();
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
receive();//把这个接收放在这,程序启动时运行一次。
}
private void myEvent(){
but.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// String date = new SimpleDateFormat("yyyyMMdd_HH:mm:ss").format(new Date());
// showMessage.append(date +"\n"+inputMessage.getText()+"\r\n");
//发送信息给服务器
//receive();//有线程启动,放这需要等待按键,每次要启动,不合适。你可以再调试。
sendMessageToServer();
}
});
}
private void join(){
new Thread(new Runnable(){
public void run() {
// TODO Auto-generated method stub
try {
socket=new Socket("127.0.0.1",30000);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}).start();
}
//接收信息
private void receive() {
try {
is = socket.getInputStream();
} catch (IOException e1) {
// TODO Auto-generated catch block
}
br = new BufferedReader(new InputStreamReader(is));
try {
String s = br.readLine();//等待第一次输入信息,这块可以优化。
showMessage.append(s+"\r\n");//输出到窗口
} catch (IOException e1) {
e1.printStackTrace();
}
new Thread(new Runnable() {
public void run() {
try {
while ((message = br.readLine()) != null) {
showMessage.append(message+"\r\n");
}
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
}).start();
}
//发送信息
private void sendMessageToServer() {
try {
out = socket.getOutputStream();
bw = new BufferedWriter(new OutputStreamWriter(out));
bw.write(inputMessage.getText());
//System.out.println(inputMessage.getText());
inputMessage.setText("");
bw.newLine();
bw.flush();
//System.out.println(socket);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
new ClientUI();
}
}