Server:
<!---->package ChatIV;
import java.net.*;
import java.io.*;
import java.util.*;
//广播聊天室服务端
public class Server {
public static void main(String args[]){
try {
ServerSocket ss = new ServerSocket(8186);//实现Socket
List sockets = new ArrayList();//创建一个集合,保存文字消息
while(true){
Socket s = ss.accept();//监听8186
sockets.add(s);//向集合中添加Socket的对象S,把听到的内容保存到集合中
Thread t1 = new ChatThread(s,sockets);//线程
t1.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
class ChatThread extends Thread{
Socket s;
List sockets;
public ChatThread(Socket s,List sockets){
this.s=s;
this.sockets=sockets;
}
public void run(){
try {
BufferedReader in = new BufferedReader(
new InputStreamReader(s.getInputStream()));//包装成字符流
while(true){
String str = in.readLine();//读BufferedReader
for(int i=0;i<sockets.size();i++){//利用For循环遍历集合
Socket s2 = (Socket)sockets.get(i);//创建Socket对象S2,强转成Socket,并获取下标
PrintWriter out = new PrintWriter(s2.getOutputStream());//文本流输出
out.println(str);//打印字符
out.flush();//刷新该流的缓冲
}
}
} catch (IOException e) {}
finally{
try {
s.close();
} catch (IOException e) {}
}
}
}
Client:
<!---->package ChatIV;
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.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
//广播聊天室客户端
public class Client {
JTextArea jta;
JTextField jtf;
BufferedReader in;
PrintWriter out;
//Swing画一个界面
private void initGUI(){
JFrame f=new JFrame("Client");
f.setSize(400,300);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jta=new JTextArea();
jta.setEditable(false);
f.add(new JScrollPane(jta));
jtf=new JTextField();
f.add(jtf,"South");
f.setVisible(true);
jtf.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
String text=jtf.getText();
jtf.setText("");
out.println(text);
out.flush();
}
});
}
//连接初始化
private void initNet(){
try {
Socket s = new Socket("127.0.0.1",8186);//创建Socket端口8186,端口号随意,避免常用端口即可
out = new PrintWriter(s.getOutputStream());//文本流输出,利用Socket对象获得getOutputStream()
in = new BufferedReader(new InputStreamReader(s.getInputStream()));//包装成字符流
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//消息接收
private void receive(){
try {
while(true){
String str = in.readLine();//读BufferedReader
if(str==null){
return ;
}
jta.append("说"+str+"\n");//加载到JTextArea中,显示
}
} catch (IOException e) {
e.printStackTrace();
}
}
private Client(){
this.initGUI();
this.initNet();
}
public static void main(String args[]){
Client c = new Client();
c.receive();
}
}
分享到:
相关推荐
在这个“基于javaSocket聊天室”项目中,我们将会探讨如何利用Java的Socket API创建一个简单的聊天室,其中不仅支持文本聊天,还具备文件传输功能。 首先,让我们了解Java Socket的基本概念。Java Socket是Java提供...
总结来说,Java Socket通过TCP协议实现了可靠的、双向的数据通信,适用于创建聊天室这样的实时通信应用。在这个过程中,服务器端负责监听连接,接收和解析消息,以及管理在线用户的状态。客户端则负责发起连接,发送...
本项目“用Java Socket实现的一个多人聊天的小软件”就是一个很好的实践案例,它利用了Java的Socket和Thread类,创建了一个简单的多用户聊天室。下面将详细解释这个项目中的关键知识点。 首先,`Socket`在Java中...
在这个基于Java的简易聊天室源代码中,开发者通过巧妙地结合这两者,实现了客户端与服务器端之间的实时通信。下面将详细解释这些知识点。 首先,让我们来理解多线程。在Java中,多线程允许程序同时执行多个任务,...
【Java Socket简单聊天室】是一个基于Java编程语言的网络通信应用示例,它实现了基本的多人聊天功能,但并未集成数据库进行用户数据的持久化存储。在这个项目中,主要涉及了两个关键组件:服务器端(Server)和...
总结起来,“简单java socket在线聊天室”项目展示了如何使用Java Socket和ServerSocket实现一个简单的多用户聊天应用,涉及了TCP连接、多线程、异常处理、数据传输等多个核心概念,是学习Java网络编程的好例子。...
Java的Socket实现的多人聊天程序是一个基于网络通信的项目,主要利用了Java的Socket类来构建客户端和服务端的通信桥梁。Socket是TCP/IP协议的一部分,它提供了两台计算机之间进行数据传输的基础。在这个项目中,...
在聊天室的实现过程中,我们通常会分为两个主要部分:服务器端(Server)和客户端(Client)。服务器端负责监听特定端口上的连接请求,并在有新的客户端连接时建立Socket连接。一旦连接建立,服务器可以接收客户端...
在给定的“javaSocket”压缩包中,包含了一个TCP聊天室服务器(TCPChatRoomServer)和一个对应的客户端(TCPChatRoomClient)的源代码。这些代码可以帮助我们理解如何在Java中实现基于Socket的网络通信。 首先,让...
【标题】中的“基于socket的聊天程序”是指利用Socket编程技术构建的一款聊天应用程序。Socket是TCP/IP协议族的一部分,它提供了在网络中不同主机间进程通信的接口。在Java中,Socket类和ServerSocket类是实现客户端...
在这个JavaQQ聊天室示例中,我们看到客户端(ChatRoomClient)和服务器(ChatRoomServer)使用Socket进行TCP通信来实现简单的聊天功能。以下是相关知识点的详细说明: 1. **Socket类**: Java中的Socket类代表TCP...
- 启动新线程并通知聊天室中的其他客户端有关连接的变化。 2. **更新在线用户列表**: - 遍历客户端列表,获取每个客户端的名字。 - 将所有客户端的名字组合成一个字符串,并广播给所有在线用户。 3. **多线程...
在聊天室的实现中,可能还会用到线程安全的数据结构,如ConcurrentHashMap或Vector,来存储在线用户和他们的Socket对象,确保在多线程环境下数据的正确性。此外,为了提供用户友好的界面,客户端通常会使用Swing或...
1. **简单聊天室** - 使用Java Socket实现简单的客户端/服务器模型,客户端发送消息到服务器,服务器广播给所有在线客户端。 2. **文件传输** - 基于Socket实现文件的上传和下载功能,通过流传输大文件。 3. **...
- **聊天应用**:基于Socket的简单聊天室,客户端发送消息到服务器,服务器广播给所有在线用户。 - **文件传输**:通过Socket实现实时文件传输,客户端请求,服务器响应并发送文件。 - **分布式服务**:微服务...
- 即时通讯:聊天室应用,服务器接收多个客户端的消息并广播给其他在线客户端。 - 游戏联机:玩家通过Socket连接服务器,进行实时对战。 六、Java网络编程进阶 - 多线程:当服务器需要同时处理多个客户端连接时,...