`

Socket编程 基本的聊天实现。

阅读更多
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编程实现聊天工具

    在本项目中,我们利用Socket编程实现了一个简单的聊天工具,这个工具是基于C++语言,并使用Microsoft Visual Studio 2008作为开发环境。对于初学者来说,这是一个很好的实践项目,可以帮助理解Socket的工作原理和...

    socket编程实现聊天程序

    在界面设计方面,通常会使用Windows Forms或WPF(Windows Presentation Foundation)技术来创建具有基本聊天功能的用户界面,比如消息输入框、发送按钮、聊天记录显示区域等。 最终,这个基于socket编程的聊天程序...

    多人聊天 socket编程实现

    下面将详细阐述Socket编程的基本概念,以及在VS2008中实现多人聊天系统的步骤。 1. **Socket基础知识**: - Socket是应用层与传输层之间的接口,提供了一种标准的通信方式,使得应用程序能够发送和接收数据。 - ...

    基于Socket网络聊天系统的设计与实现

    1. Socket编程:Socket编程是指使用Socket类来实现网络通信的编程技术。在该系统中,Socket类用于实现点到点的聊天和多点对多点的聊天。Socket类提供了一个基本的网络编程接口,允许开发者创建网络应用程序。 2. ...

    socket编程聊天室(C++)

    Socket编程是计算机网络通信中的重要技术,主要用于实现进程间的网络通信。在这个“socket编程聊天室(C++)”项目中,我们主要会涉及到以下几个关键知识点: 1. **Socket概念**:Socket是网络上的两个进程间通信的...

    c++实现的socket编程聊天程序

    总的来说,"c++实现的socket编程聊天程序"是一个基础的网络通信教学案例,适合初学者了解Socket编程的基本流程和原理。通过学习和实践,开发者可以掌握如何在C++中创建网络应用程序,为更复杂的网络系统开发奠定基础...

    socket网络编程,可以实现聊天系统,还可以传输文件

    Socket网络编程是计算机网络通信的核心技术之一,它允许两台或多台计算机通过互联网进行数据交换。在本主题中,我们将深入探讨如何利用Socket实现聊天系统和...理解并熟练掌握Socket编程,对于开发网络应用至关重要。

    socket编程实现通信

    以上是对"socket编程实现通信"这一主题的详细阐述,涵盖了Socket的基本概念、TCP协议、服务器与客户端的编程步骤、数据传输、异常处理以及实际应用等多个方面。通过这些知识点,开发者能够构建起基本的网络通信系统...

    VB 实现的socket编程 聊天程序

    【VB 实现的Socket编程 聊天程序】 在信息技术领域,Socket编程是一种常见的网络通信技术,它允许应用程序通过网络发送和接收数据。VB(Visual Basic)作为Microsoft开发的一种可视化的编程工具,提供了丰富的功能...

    TCP与UDP客户服务端实现大小写及SOCKET编程实现聊天程序

    * SOCKET编程实现聊天程序的基本原理 * Java语言中实现TCP和UDP客户服务端的方法 * 使用BufferedReader和DataOutputStream来读取和发送数据 * 使用DatagramPacket来实现UDP数据传输 * 使用ServerSocket和Socket来...

    基于TCP/IP socket的局域网聊天系统

    通过这个项目,开发者不仅可以掌握TCP/IP Socket编程的基本技巧,还能了解到如何在MFC环境下构建交互式的应用程序。 总的来说,基于TCP/IP Socket的局域网聊天系统是网络编程的一个典型应用场景,它涵盖了网络通信...

    socket编程 简单聊天程序

    Socket编程是计算机网络通信中的重要概念,主要用于实现进程间的网络通信。在这个“简单聊天程序”中,我们将探讨如何使用Socket来构建一个基本的聊天应用,让两个用户可以通过互联网进行实时交流。 首先,我们需要...

    练习\Socket和多线程编程的聊天程序实现

    1. **Socket编程**:Socket是网络编程中的基本组件,它提供了一种在互联网中两台计算机之间进行通信的机制。在Java中,`java.net.Socket`类代表客户端Socket,用于连接到服务器;`java.net.ServerSocket`类则代表...

    基于java socket网络编程实现的简单模拟qq聊天的程序,可实现并发聊天

    Java Socket网络编程是Java语言中实现网络通信的基础,它提供了低级别的、面向连接的、...而本示例中的简单QQ聊天程序,主要是为了演示Java Socket的基本使用和并发处理,帮助初学者理解网络编程的基本概念和操作流程。

    网络语音通信 socket编程实现

    Socket编程是实现这一功能的核心技术之一,尤其在实时通信场景下,它能够提供高效、低延迟的数据传输。本项目是一个本科课程设计,目的是让学生掌握网络语音通信的基础原理和编程实践,通过VC++编程语言实现两台在...

    java中socket在线编程聊天系统的小案例

    总的来说,这个"java中socket在线编程聊天系统的小案例"提供了一个实用的起点,帮助开发者掌握Socket编程的基本概念和实践技巧。通过研究和实践这个案例,你将能够构建自己的聊天应用程序,进一步理解和应用网络编程...

    Java聊天室程序,socket编程

    Java聊天室程序是基于Socket编程实现的,这是一种网络通信机制,允许两台计算机通过网络交换数据。在Java中,Socket类和ServerSocket类是实现这一功能的核心组件。本程序能够支持多人在线同时聊天,这意味着它涉及到...

    c#socket编程实现聊天程序

    总的来说,通过C#的Socket编程,我们可以构建出基本的聊天应用程序,了解网络通信的基本原理,掌握Socket类的使用方法。这个过程涵盖了网络编程、多线程编程以及基础的C#语法,对于IT从业者来说是非常宝贵的经验。

    Java版socket编程实现带语音聊天和文件传送功能的局域网聊天工具

    本资源是本人前面发过的一个局域网聊天工具的升级版。...代码保证可用,如有问题请留言,代码较规范,结构清晰,相信对学习java socket编程和swing界面开发的朋友有一定的帮助。 注:main函数在MainFrame类

    socket编程实现网络聊天

    在本实验中,我们使用Socket编程创建了一个简单的网络聊天应用,这对于理解和掌握网络编程的基本概念非常有帮助。 首先,让我们了解一下Socket。Socket是网络编程中的一个接口,它是进程间通信(IPC)的一种方式,...

Global site tag (gtag.js) - Google Analytics