TCP编程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 delete(Socket socket){
super.remove(socket);
}
synchronized void sendClientCount(){
String info = "当前聊天人数"+size();
System.out.println(info);
writeAll(info);
}
synchronized void writeAll(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 (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerProcess {
private SocketManager socketMan = new SocketManager();
void getServer(){
try{
ServerSocket serverSocket = new ServerSocket(7777);
System.out.println("服务器套接字已创建");
while(true){
Socket socket = serverSocket.accept(); //等待连接
new write_Thread(socket).start();//启动线程
socketMan.add(socket);//添加套接字
socketMan.sendClientCount();//将连接数输出
}
}catch(Exception e){
e.printStackTrace();
}
}
class write_Thread extends Thread{
Socket socket = null;
private BufferedReader reader;
public write_Thread(Socket socket){
this.socket = socket;
}
public void run(){
try{
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg;
while((msg=reader.readLine())!= null){
//System.out.println(msg);
socketMan.writeAll(msg);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
public static void main(String[] args){
ServerProcess server = new ServerProcess();
server.getServer();
}
}
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
public class Client2 extends JFrame{
private static final long serialVersionUID = 1L;
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 jScrollPanel = new JScrollPane();
private BufferedReader reader;
private PrintWriter writer;
private Socket socket;
public Client2(String title){
super(title);
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);
jScrollPanel.setViewportView(msgArea);
jpanel.add(jScrollPanel);
jScrollPanel.setBounds(10,40,320,220);
sendField.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
writer.println(nameField.getText()+":"+sendField.getText());
sendField.setText("");
}
});
}
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);
while(true){
msgArea.append(reader.readLine()+"\n");
}
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args){
Client2 client = new Client2("迷你聊天屋");
client.setVisible(true);
client.getSocket();
}
}