• 一个java 的tcp聊天程序的客户端


    import java.io.*;
    import java.net.*;
    import java.util.Scanner;
    
    
    public  class client
    {
    	public static void main(String[] args)
    	{
    		work.link();
    		new MyworkWriter().start();		
    	}
    }
    
    class work
    {
    	//是否在线
    	static boolean online=false;
    	static Socket s1 =null;
    	static BufferedReader in=null;	 
    	static PrintWriter  out=null;	
    	
    	static void set_online()
    	{
    		online=true;
    	}
    	static void set_offline()
    	{
    		online=false;
    	}
    	static void link()
    	{
    		
    		try{
    		      //链接sever端
    		      s1 = new Socket("127.0.0.1",9998);		     	
    		      //实例化输入流     
    		      in= new BufferedReader(new InputStreamReader(s1.getInputStream()));	
    		      out=new PrintWriter(s1.getOutputStream(),true);
    		      set_online();
    		      System.out.println("已连接");
    		      new  MyworkReader ().start();
    		    }catch(SocketException e){
    		    	 System.out.println("无法与对方主机建立连接");
    		    	 set_offline();
    		      System.out.println(e);
    		    }catch(IOException e){
    		    	System.out.println("输入输出出错");
    		    	set_offline();
    		      System.out.println(e);
    		    }  
    		
    	}
    	
    }
    //创建一个进程用来写入并发送数据
    	 class MyworkWriter extends Thread
    	{
    		
    	  
    		public void run()
    		{
    		  InputStreamReader isr = new InputStreamReader(System.in);
    		  BufferedReader br = new BufferedReader(isr);
    		  String msg;
    			try
    			{
    				while(true)
    				{
    					msg = br.readLine();
    					msg = msg.trim();
    					switch(msg)
    					{
    			    		case "exit":
    			    		System.out.println("exit,程序退出");
    			    		System.exit(0);
    			    		break;
    			    		case "link":
    				    	System.out.println("link,连接远程主机");
    				    	if(work.online)
    						{
    							
    							System.out.println("在线状态,不能重复连接");
    						}
    						else
    						{
    							work.link();
    						}
    				    	break;
    			    		case "help":
    				    	System.out.println("help,帮助");
    				    	System.out.println("exit,退出程序");
    				    	System.out.println("link,连接主机");		
    				    	System.out.println("close,关闭连接");
    				    	break;	
    			    		case "close":
    					    	System.out.println("close,关闭连接");
    					    	
    					    	work.s1.close();
    					    	break;	
    				    	default:
    				    		if(work.online)
    							{
    								work.out.println(msg);
    							}
    							else
    							{
    								System.out.println("你已经离线状态,为您重新连接服务器.");
    								work.link();
    								if(work.online)
    								{
    									work.out.println(msg);									
    								}
    								else
    								{
    									System.out.println("还是不能连接,可能远程服务器已经关闭.");
    								}
    								
    							}
    				    		
    			    		
    					}
    					
    					
    				}
    			}
    			
    	  		catch(IOException e)
    	  		{
    		    	System.out.println("发送数据时出错");
    		    	System.out.println(e);
    	  		}
    	  }
    	}
    	//创建一个进程用来进行接收读取数据
    	class MyworkReader extends Thread
    	{
    		public void run()
    		{
    			String msg;
    			try
    			{
    				while(true)
    				{
    					msg = work.in.readLine();
    					System.out.println("对方说:"+msg);
    					if(msg.equals("bye"))
    					{
    						System.out.println("对方下线,程序退出");
    						work.set_offline();
    						break;
    					}
    				}
    			}catch(IOException e)
    			{
    				System.out.println("读数据时出错,可能对方主机掉线");    	
    				System.out.println(e);
    				work.set_offline();
    			}
    		}
    	}
    
  • 相关阅读:
    策略梯度(Policy Gradient)
    无约束优化问题
    有约束优化问题
    计算机网络学习资料
    为什么要用等效基带信号?
    通信网实验—话务量分析
    无感数据埋点(自定义注解+aop+异步)
    排序算法
    位运算常见操作
    数据库与缓存一致性的几种实现方式
  • 原文地址:https://www.cnblogs.com/egai/p/3599614.html
Copyright © 2020-2023  润新知