package com.ethan.socket;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JApplet;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class Client extends JFrame implements Runnable {
private JPanel jpanel = new JPanel();
private JLabel nameLabel = new JLabel("姓名:");
private JTextField nameField = new JTextField();
private JTextArea msgArea = new JTextArea();
private JTextField sendField = new JTextField();
private JScrollPane jScrollPane1 = new JScrollPane();
private BufferedReader reader;
private PrintWriter writer;
private Socket socket;
public Client(String title) {
super(title);
// setResizable(false);
this.setSize(360,340);
this.add(jpanel);
jpanel.setLayout(null);
msgArea.setEditable(false);
jpanel.add(nameLabel);
nameLabel.setBounds(10,10,60,20);
jpanel.add(nameField);
nameField.setBounds(60,10,270,21);
jpanel.add(sendField);
sendField.setBounds(10,270,320,21);
msgArea.setColumns(20);
msgArea.setRows(5);
jScrollPane1.setViewportView(msgArea);
jpanel.add(jScrollPane1);
jScrollPane1.setBounds(10,40,320,220);
sendField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
writer.println(nameField.getText()+": "+sendField.getText());
sendField.setText("");
}
});
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true) {
try {
msgArea.append(reader.readLine()+"\n");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private void getSocket() {
msgArea.append("尝试与服务器连接");
try {
socket = new Socket("127.0.0.1",7777);
msgArea.append("准备完毕!");
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new PrintWriter(socket.getOutputStream(),true);
new Thread(this).start();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Client client = new Client("迷你聊天屋");
client.setVisible(true);
client.getSocket();
}
}
package com.ethan.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
private SocketManager socketMan = new SocketManager();
void getServer() {
try {
ServerSocket serverSocket = new ServerSocket(7777);
System.out.println("server socket starting.......");
while(true) {
Socket socket = serverSocket.accept();
new Write_Thread(socket).start();
socketMan.add(socket);
socketMan.sendClientCount();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private class Write_Thread extends Thread {
Socket socket = null;
private BufferedReader reader;
private PrintWriter writer;
public Write_Thread(Socket socket) {
this.socket = socket;
}
public void run() {
try {
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//writer = new PrintWriter(socket.getOutputStream(),true);
String msg;
while((msg=reader.readLine())!=null) {
System.out.println(msg);
socketMan.sendToAll(msg);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String args[]) {
Server server = new Server();
server.getServer();
}
}
package com.ethan.socket;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;
public class SocketManager extends ArrayList {
synchronized void add(Socket socket) {
super.add(socket);
}
synchronized void remove(Socket socket) {
super.remove(socket);
}
synchronized void sendToAll(String str) {
PrintWriter writer = null;
Socket socket;
for(int i=0;i<size();i++) {
socket = (Socket) get(i);
try {
writer = new PrintWriter(socket.getOutputStream(),true);
if(writer!=null) {
writer.println(str);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
synchronized void sendClientCount() {
String count = "当前聊天人数:"+size();
System.out.println(count);
sendToAll(count);
}
}
特把以前学习过的代码拿出来,分享一下