• 服务器端与客户端TCP连接入门(二)


    1、服务器端程序

    package Socket;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class EchoServer {
    
        public static void main(String[] args) throws Exception {
            
            ServerSocket server =null;//定义ServerSocket对象
            Socket client=null;//定义socket对象,表示客户端
            PrintStream out=null;//声明打印流对象,以向客户端输出
            BufferedReader buf = null;//用于接收客户端发来的信息
            server = new ServerSocket(8888);//此服务器在8888端口进行监听
            boolean f=true;
            while(f){
                System.out.println("服务器运行,等待客户端连接");
                client=server.accept();//接收客户端连接
                buf = new BufferedReader(new InputStreamReader(client.getInputStream()));//得到客户端的输入信息
                out= new PrintStream(client.getOutputStream());
                //循环读取buf所有内容
                boolean flag=true;
                while(flag){
                    String str=buf.readLine();
                    if(str==null||"".equals(str)){
                        flag=false;//结束循环
                    }
                    else{
                        if("bye".equals(str)){
                            flag=false;
                        }
                        else
                        {
                            out.println("ECHO:"+str);//正常结束,向客户端回显信息
                        }
                    }
                }
                out.close();
                client.close();
                
            }
            server.close();
        }
    
    }

    2、客户端程序

    package Socket;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    public class EchoClient {
    
        public static void main(String[] args) throws Exception {
            
            Socket client=null;//声明Socket对象
            client=new Socket("localhost",8888);//指定连接的主机和端口
            BufferedReader buf=null;//接收服务器端发送回来的信息
            PrintStream out=null;//输出流,向服务器端发送信息
            BufferedReader input=null;
            input=new BufferedReader(new InputStreamReader(System.in));//从键盘接收数据
            out = new PrintStream(client.getOutputStream());//向服务器端发送信息
            buf= new BufferedReader(new InputStreamReader(client.getInputStream()));//接收服务器端输入信息
            boolean flag=true;
            while(flag){
                System.out.println("输入信息:");
                String str=input.readLine();//从键盘接收数据
                out.println(str);    //向服务器端输入信息
                if("bye".equals(str)){    //如果输入bye,结束操作
                    flag=false;
                }
                else{
                    String echo=buf.readLine();//接收ECHO信息
                    System.out.println(echo);//输出ECHO信息
                }
            }
            client.close();
            buf.close();
        }
    
    }

     效果如下:

    此时,服务器每次只能有一个用户连接,属于单线程,要让多个用户连接服务器,要使用多线程...

  • 相关阅读:
    java.utils.HashMap数据结构分析(转)
    oracle什么时候须要commit
    CreateFont具体解释
    Java工厂模式
    簡單SQL存儲過程實例
    Cocos2d-x 3.0新引擎文件夹结构
    设计模式之十 适配器模式
    腰围2尺1,2,3,4,5,6,7,8寸各自等于是多少厘米/英寸(对比表)
    iOS 基础函数解析
    内部元素一一相应的集合的算法优化,从list到hashmap
  • 原文地址:https://www.cnblogs.com/Donnnnnn/p/6197475.html
Copyright © 2020-2023  润新知