一个利用Socket做的聊天室小例子
来源:互联网 发布:centos 7 取消待机 编辑:程序博客网 时间:2024/04/27 20:17
Client.java文件
import java.net.*;import java.awt.event.*;import java.io.*;import javax.swing.*;public class Client extends JFrame implements Runnable{/** * */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 Client(String title){super(title);this.setSize(360, 340);this.add(jpanel);jpanel.setLayout(null);msgArea.setEnabled(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(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubwriter.println(nameField.getText()+":"+sendField.getText());;sendField.setText("");}});}/** * @param args */public void run(){while(true){ try{msgArea.append(reader.readLine()+"\n");}catch(Exception e){e.printStackTrace();}}}void getSocket(){msgArea.append("尝试与服务器链接");try{socket =new Socket("127.0.0.1",9999);msgArea.append("聊天准备完毕");reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));writer=new PrintWriter(socket.getOutputStream(),true);new Thread(this).start();}catch(Exception e){e.printStackTrace();}}public static void main(String[] args) {// TODO Auto-generated method stubClient client=new Client("聊天屋");client.setVisible(true);client.getSocket();}}
ServerProcess.java文件
import java.net.*;import java.io.*;public class ServerProcess {private SocketManager socketMan=new SocketManager();void getServer(){try{ServerSocket serverSocket=new ServerSocket(9999);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;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.writeAll(msg);}}catch(Exception e){e.printStackTrace();}}}public static void main(String[] arg){ServerProcess server=new ServerProcess();server.getServer();}}
SocketManager.java文件
import java.util.*;import java.net.*;import java.io.*;public class SocketManager extends ArrayList {/** * */private static final long serialVersionUID = 1L;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 write=null;Socket socket;for(int i=0;i<size();i++){socket=(Socket)get(i);try{write =new PrintWriter(socket.getOutputStream(),true);if(write!=null)write.println(str);}catch(Exception e){e.printStackTrace();}}}}
- 一个利用Socket做的聊天室小例子
- 一个SDK里做聊天室的例子(1)
- 一个SDK里做聊天室的例子(2)
- 使用socket.io做一个简单的WEB聊天室
- 利用angular5 和.net core做的一个聊天室
- 对做的一个小的C++聊天室的总结
- 用java写的一个利用socket通信的C/S小例子
- 一个简单的 java socket 小例子
- Linux socket 的一个小例子
- java聊天室:本人做的例子(一)
- 简单socket 聊天室 C/S模式 小例子
- 一个Socket通信小例子
- 利用socket做的帮室友找对象小软件
- 学习Socket编写的聊天室小程序
- 用java socket做一个聊天室,实现多人聊天的功能。
- socket和小聊天室
- 利用libevent做一个简单的服务器压力测试例子
- 学习lucene3.5时,做的一个小例子
- linux-0.11调试教程,task2参数所在内存页的页目录项和页表项
- IOS开发技巧
- UIView类的UIViewAnimationWithBlocks扩展 和 使用core animation
- Java开发日志分析工具Log4j使用详解
- Yii:如何更改CGridView组件中的droplist默认过滤条件
- 一个利用Socket做的聊天室小例子
- 转载ETL架构师面试题
- 随想录(程序员和收入)
- 【Java类集】_List接口笔记(实例亲测)
- PS1,PS2,PS3,PS4
- 关于集群、负载均衡、分布式的区别
- 工作后还用学习吗?又谈学习方法
- [LeetCode] Populating Next Right Pointers in Each Node
- LVS+ldirector实现负载均衡