`

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();
			}
		}
		
	}
	 
}

分享到:
评论

相关推荐

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

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

    Java版socket编程实现带语音聊天和文件传送功能

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

    socket 实现多人聊天

    本次实验利用TCP/IP, 语言环境为 C/C++ 利用套接字Socket编程,以及线程处理, 实现Server/CLient 之间多人的聊天系统的基本功能。

    Java版socket编程 局域网聊天工具

    具体功能有: 1.采用了全新的界面风格 2.实现了基本文字聊天功能 3.实现了基本文件传送功能 4.实现了发送窗口抖动的功能 5.实现了语音聊天的功能 注:main函数在MainFrame类

    基于Java聊天室的socket设计和实现.docx

    2.2 Socket编程的基本流程 8 2.3 Socket编程的常用API 9 第三章 Java Socket编程实现 11 3.1 Java Socket编程的实现原理 11 3.2 Java Socket编程的实现步骤 13 3.3 Java Socket编程的实现技巧 14 第四章 Java聊天室...

    Socket实现qq聊天

    通过socket编程,实现qq基本界面,可以添加删除好友,聊天等功能

    VC++ mfc socket编程开发聊天与文件传输功能(vs2019)

    我想开发一个集群功能,查到用CSocket来实现比较可行,于是先用本程序进行了基本通讯的测试。通过服务端向客户端发送信息,由客户端处理后返回信息。 本程序包括了基本的服务端、客户端功能,实现了服务端与客户端...

    基于Socket的网络聊天系统

    本文用跨平台且具有强大网络编程功能的JAVA语言,实现了一个聊天系统。本系统采用客户机/服务器架构模式,数据库管理系统用SQL Server2000完成,并通过JDBC-ODBC桥访问数据库。本聊天系统可以实现多人对多人的聊天,...

    EasyChat ,Java Socket编程,简易聊天程序

    聊天程序 JavaSocket编程,类似QQ的聊天程序(注册、登陆、聊天等) 1、界面模仿QQ界面,能够发起一对一聊天、接受聊天请求; 2、能够以当前日期和时间(精确到分)命名的文件来保持聊天记录; 3、能够调出聊天记录...

    利用Java语言的Socket编程实现网络环境下两台计算机之间的字符聊

    利用Java 语言的Socket编程实现网络环境下两台计算机之间的字符聊天功能。一个QQ系统由一个服务器和若干个客户端组成。服务器和叫客户端之间通过TCP/IP网络协议通信。客户端的为用户服务的。客户端的功能:一是用户...

    基于vb.net的socket的聊天软件

    基于socket的TCP通讯是window编程的基本技术,通过该案例研究学习可以在掌握面向对象编程方法的同时,对通用协议进行了解。同学们可视时间、精力完成不同复杂程度的程序 为原创,引用时请注明出处。

    用Java Socket实现一个简单的基于P2P范型的即时聊天系统。

    暂时仅仅设计了以下几个功能点: 1.点对点单人聊天; 2.多人在线同时聊天; 3.用户可以自由加入和退出系统; 4.具备用户在线状态监听;

    C# Socket 聊天室 客户端和服务器

    它实现了聊天的基本功能,支持多个客户端以不同的用户名同时登录服务器,每个客户端可以随时同服务器断开。 服务端方面也添加了历史记录,可根据个人需要自行修改! 功能上包括信息的实时刷新等等,其他的自己看了...

    socket编程

    socket编程实现的聊天程序,最基本的一个用c#实现的程序。

    利用Java的Socket网络编程实现小型聊天室

    这个小型的聊天系统我没有用swt去做出界面出来,因为之前用的32位的,现在换了个环境导致之前的包不能用了,只能以控制台进行信息的交互。另外,这里介绍的是基于TCP的,UDP的简单一些就不介绍了。 基本代码 服务端 ...

    socket网络聊天室

    基于Linux socket函数及系统函数编写的小型网络聊天室,实现了单聊,多聊,群聊的基本功能,及显示在线人数,代码本人写的,可直接运行,是学习网络编程和系统编程的好的代码。

    java聊天室程序--基于Socket的网络编程

    本文讨论了如何利用java技术开发聊天室系统,基本满足了结构化、界面友好、速度快、安全性以及稳定性等特点。 系统着重研究并实现了网络应用的部分。根据实现的情况看,具有较友好的聊天界面生成效果,以及流畅的...

    SOCKET编程,仿飞鸽的小例子

    在学习网络编程时编写的一个仿飞鸽的局域网聊天程序。支持好友添加,好友上线通知,下线通知,点对点聊天,群聊等基本功能。

    udp.rar_SOCKET套接编程_UDP socket_c udp_c socket UDP_udp 聊天

    最基本的聊天程序,UDP实现,Socket,便于零基础者初步学习网络套接字编程(注释清晰)

    socket协议编写的聊天室模式.

    Android简易聊天室源代码(基本实现了聊天室的功能,包括好友列表,信息列表,Android相关数据库,Socket编程以及java端sqlite数据库的使用):

Global site tag (gtag.js) - Google Analytics