public class Server
{
//用来存储所有连接上来的客户
private List<ServerThread> clients;
public static void main(String[] args)
{
Server s = new Server();
s.startServer(9988);
}
public void startServer(int port)
{
ServerSocket ss = null;
Socket socket = null;
try
{
ss = new ServerSocket(port);
clients=new ArrayList<ServerThread>();
while (true)
{
System.out.println("waiting...");
socket = ss.accept();
ServerThread st = new ServerThread(socket);
new Thread(st).start();
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
SocketUtils.closeSocketServer(ss);
}
}
private class ServerThread implements Runnable
{
private Socket s = null;
private BufferedReader br;
private PrintWriter out;
private String address;
private String username;
private boolean flag;
public ServerThread(Socket s) throws IOException
{
this.s = s;
br = new BufferedReader(new InputStreamReader(s.getInputStream(),"utf-8"));
out = new PrintWriter(s.getOutputStream(),true);
username=br.readLine();
System.out.println("username="+username);
address = s.getInetAddress().getHostAddress() + ":" + s.getPort();
// System.out.println(name + "连接上来了");
clients.add(this);
send(username+"上线了");
}
private void stop()
{
System.out.println(username+"已经离开了");
clients.remove(this);
flag = false;
}
/**
* 接收用户的信息
*/
private void receive()
{
String str = null;
try
{
while ((str = br.readLine()) != null)
{
if (str.equalsIgnoreCase("quit"))
{
// 关闭
stop();
out.println("disconnect");
break;
}
String sendMsg=username+":"+str;
// out.println(username+":"+ str);
//给所有的用户发送信息
send(sendMsg);
System.out.println("out");
}
}
catch (IOException e)
{
stop();
System.out.println("用户非正常死亡->"+username);
}finally{
SocketUtils.closeSocket(s);
}
}
/**
* 给用户发信息
* @param msg
*/
private void send(String msg){
for(ServerThread st:clients){
st.out.println(msg);
}
}
public void run()
{
// if(!flag)break;
receive();
}
}
}
public class Client
{
private Socket s;
private BufferedReader br;
private PrintWriter out;
private boolean flag=true;
public static void main(String[] args)
{
Client c=new Client();
// c.sendMessage();
c.startup();
}
public void startup(){
BufferedReader sbr=null;
try
{
s=new Socket("127.0.0.1",9988);
//s=new Socket("115.28.240.213",9988);
out=new PrintWriter(s.getOutputStream(),true);
out.println("myname");
br=new BufferedReader(new InputStreamReader(s.getInputStream(),"utf-8"));
sbr=new BufferedReader(new InputStreamReader(System.in));
new Thread(new ClientThread()).start();
String str=null;
while((flag)&&(str=sbr.readLine())!=null){
if(!flag)break;
String msg=new String(str.getBytes("gbk"),"utf-8");
out.println(msg);
}
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
private void closeSocket(Socket s){
if(s!=null){
try
{
s.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
private void receive(){
try
{
String rs=br.readLine();
if(rs.equalsIgnoreCase("disconnect")){
flag=false;
System.out.println("按回车退出");
return ;
}
System.out.println(rs);
}
catch (IOException e)
{
e.printStackTrace();
}
}
private class ClientThread implements Runnable{
@Override
public void run()
{
while(true){
if(!flag)break;
receive();
}
}
}
}
分享到:
相关推荐
在本项目中,我们利用Socket编程实现了一个简单的聊天工具,这个工具是基于C++语言,并使用Microsoft Visual Studio 2008作为开发环境。对于初学者来说,这是一个很好的实践项目,可以帮助理解Socket的工作原理和...
在界面设计方面,通常会使用Windows Forms或WPF(Windows Presentation Foundation)技术来创建具有基本聊天功能的用户界面,比如消息输入框、发送按钮、聊天记录显示区域等。 最终,这个基于socket编程的聊天程序...
下面将详细阐述Socket编程的基本概念,以及在VS2008中实现多人聊天系统的步骤。 1. **Socket基础知识**: - Socket是应用层与传输层之间的接口,提供了一种标准的通信方式,使得应用程序能够发送和接收数据。 - ...
1. Socket编程:Socket编程是指使用Socket类来实现网络通信的编程技术。在该系统中,Socket类用于实现点到点的聊天和多点对多点的聊天。Socket类提供了一个基本的网络编程接口,允许开发者创建网络应用程序。 2. ...
Socket编程是计算机网络通信中的重要技术,主要用于实现进程间的网络通信。在这个“socket编程聊天室(C++)”项目中,我们主要会涉及到以下几个关键知识点: 1. **Socket概念**:Socket是网络上的两个进程间通信的...
总的来说,"c++实现的socket编程聊天程序"是一个基础的网络通信教学案例,适合初学者了解Socket编程的基本流程和原理。通过学习和实践,开发者可以掌握如何在C++中创建网络应用程序,为更复杂的网络系统开发奠定基础...
Socket网络编程是计算机网络通信的核心技术之一,它允许两台或多台计算机通过互联网进行数据交换。在本主题中,我们将深入探讨如何利用Socket实现聊天系统和...理解并熟练掌握Socket编程,对于开发网络应用至关重要。
以上是对"socket编程实现通信"这一主题的详细阐述,涵盖了Socket的基本概念、TCP协议、服务器与客户端的编程步骤、数据传输、异常处理以及实际应用等多个方面。通过这些知识点,开发者能够构建起基本的网络通信系统...
【VB 实现的Socket编程 聊天程序】 在信息技术领域,Socket编程是一种常见的网络通信技术,它允许应用程序通过网络发送和接收数据。VB(Visual Basic)作为Microsoft开发的一种可视化的编程工具,提供了丰富的功能...
* SOCKET编程实现聊天程序的基本原理 * Java语言中实现TCP和UDP客户服务端的方法 * 使用BufferedReader和DataOutputStream来读取和发送数据 * 使用DatagramPacket来实现UDP数据传输 * 使用ServerSocket和Socket来...
通过这个项目,开发者不仅可以掌握TCP/IP Socket编程的基本技巧,还能了解到如何在MFC环境下构建交互式的应用程序。 总的来说,基于TCP/IP Socket的局域网聊天系统是网络编程的一个典型应用场景,它涵盖了网络通信...
Socket编程是计算机网络通信中的重要概念,主要用于实现进程间的网络通信。在这个“简单聊天程序”中,我们将探讨如何使用Socket来构建一个基本的聊天应用,让两个用户可以通过互联网进行实时交流。 首先,我们需要...
1. **Socket编程**:Socket是网络编程中的基本组件,它提供了一种在互联网中两台计算机之间进行通信的机制。在Java中,`java.net.Socket`类代表客户端Socket,用于连接到服务器;`java.net.ServerSocket`类则代表...
Java Socket网络编程是Java语言中实现网络通信的基础,它提供了低级别的、面向连接的、...而本示例中的简单QQ聊天程序,主要是为了演示Java Socket的基本使用和并发处理,帮助初学者理解网络编程的基本概念和操作流程。
Socket编程是实现这一功能的核心技术之一,尤其在实时通信场景下,它能够提供高效、低延迟的数据传输。本项目是一个本科课程设计,目的是让学生掌握网络语音通信的基础原理和编程实践,通过VC++编程语言实现两台在...
总的来说,这个"java中socket在线编程聊天系统的小案例"提供了一个实用的起点,帮助开发者掌握Socket编程的基本概念和实践技巧。通过研究和实践这个案例,你将能够构建自己的聊天应用程序,进一步理解和应用网络编程...
Java聊天室程序是基于Socket编程实现的,这是一种网络通信机制,允许两台计算机通过网络交换数据。在Java中,Socket类和ServerSocket类是实现这一功能的核心组件。本程序能够支持多人在线同时聊天,这意味着它涉及到...
总的来说,通过C#的Socket编程,我们可以构建出基本的聊天应用程序,了解网络通信的基本原理,掌握Socket类的使用方法。这个过程涵盖了网络编程、多线程编程以及基础的C#语法,对于IT从业者来说是非常宝贵的经验。
本资源是本人前面发过的一个局域网聊天工具的升级版。...代码保证可用,如有问题请留言,代码较规范,结构清晰,相信对学习java socket编程和swing界面开发的朋友有一定的帮助。 注:main函数在MainFrame类
在本实验中,我们使用Socket编程创建了一个简单的网络聊天应用,这对于理解和掌握网络编程的基本概念非常有帮助。 首先,让我们了解一下Socket。Socket是网络编程中的一个接口,它是进程间通信(IPC)的一种方式,...