• 网络编程 实现 客户端与服务器端的简单通信


    六,代码演示实现客户端与服务器端的简单通信
     
    代码中所使用的 IP号码,必须是本机自己的IP号码 (自行查询:cmd---ipconfig/all )
     
    1.[客户端向服务器端 发送一个整型数据,服务器端进行接收]
     
    (1)先写服务器端
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    //写服务器端
    
    public class TestServerData {
    
        public static void main(String[] args) {
    
            
            try {
                //1.创建 ServerSocket 类型的对象, 并提供端口号
                ServerSocket ss=new ServerSocket (8888);
                
                //2.等待客户端的连接请求,使用accept()方法,保持阻塞状态
                System.out.print("等待客户端的连接请求....");
                Socket s = ss.accept();
                System.out.println("客户端连接成功!");
                
                //3.使用 输入输出流 进行通信
                //服务器接收客户端 发来的 数据 66,并打印出来
                 DataInputStream dis=new DataInputStream(s.getInputStream());
                 int res = dis.readInt();
                 System.out.println("res= "+res);
                 //关闭相关的套接字
                 s.close();
                 ss.close();
                
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            
        }
    
    }
     
     
    (2)再写客户端
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class TestClientData {
    
        public static void main(String[] args) {
    
            
            
            try {
                //1. 创建  Socket 类型的对象, 指定IP地址和 端口号
                 Socket s = new Socket ("183.16.232.251",8888);
                 
                 //2.使用输入输出流 进行通信
                 //让客户端向服务器端发送整型数据 66
                 DataOutputStream dos=new DataOutputStream(s.getOutputStream());
                 dos.writeInt(66);
                 
                 System.out.println("成功发送数据至服务器!");
                 //3.关闭Socket对象
                 s.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            
        }
    
    }
     


    2.[客户端向服务器端 发送一个字符串类型数据,服务器端进行接收]
     
    (1)先写服务器端
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class TestServerString {
    
        public static void main(String[] args) {
            
            
            try {
                //1.创建ServerSocket类型的对象 ,并提供端口号
                ServerSocket ss = new ServerSocket(8889);
                
                //2.等待客户端的连接请求,使用accept()方法;
                Socket s = ss.accept();
                System.out.println("客户端连接成功!");
                
                //3.使用 输入输出流进行通信;
                //服务器接收来自客户端 发来的“hello”,并打印
                BufferedReader br = new BufferedReader(
                        new InputStreamReader(s.getInputStream()));
                String str = br.readLine();
                System.out.println("str= "+str);
                //向客户端回发消息 "I received!!! "
                //4.关闭相关的套接字
                br.close();
                s.close();
                ss.close();
                
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }
    
    }
     
    (2)再写客户端
    import java.io.IOException;
    import java.io.PrintStream;
    import java.net.Socket;
    
    public class TestClientString {
    
        public static void main(String[] args) {
    
            
            try {
                //1.创建Socket类的对象,提供IP号,并且指定 端口号
                Socket s=new Socket("183.16.232.251",8889);
                
                //2.使用 输入输出流 进行通信
                //向服务器端发送 字符串数据 “hello”
                PrintStream ps=new PrintStream (s.getOutputStream());
                ps.println("hello");
                System.out.println("数据成功发送到服务器!");
                //等待接收 服务器的 回复 ,并且打印回复的结果
                //3.关闭Socket对象
                
                ps.close();
                s.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            
        }
    
    }
     
     
     
     
     
     
    练习:
    编写服务器端和客户端,要求客户端向服务器端发送内容"hello",使用BufferedReader类和PrintStream类。
     
    作业:
    要求客户端发送的字符串内容由用户手动输入,使用BufferedReader实现。
    要求当服务器接收到客户端的内容时,向客户端回发消息"I Received!"。
    要求客户端和服务器不断地进行通信,直到客户端发送"bye"时,通信结束。
    要求服务器可以不断地响应客户端的连接请求,还要能同时和多个客户端通信。
     
     
    答案:
     
    1.先写服务器端
    import java.io.BufferedReader;
    import java.io.DataInputStream;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class TestServerString {
    
        public static void main(String[] args) {
            try{
                //1.创建ServerSocket类型的对象,并提供端口号
                ServerSocket ss = new ServerSocket(8888);
                //2.等待客户端的连接请求,使用accept()方法,保持阻塞状态
                System.out.println("等待客户端的连接请求...");
                Socket s = ss.accept();
                System.out.println("客户端连接成功!");
                //3.使用输入输出流进行通信
                /*
                //服务器接收客户端发来的"hello"并打印
                BufferedReader br = new BufferedReader(
                        new InputStreamReader(s.getInputStream()));
                String str = br.readLine();
                System.out.println(str); // hello
                //向客户端回发消息“I received!”
                PrintStream ps = new PrintStream(s.getOutputStream());
                ps.println("I received!");
                */
                BufferedReader br = new BufferedReader(
                        new InputStreamReader(s.getInputStream()));
                PrintStream ps = new PrintStream(s.getOutputStream());
                //编程实现服务器可以不断地客户端进行通信
                while(true){
                    //服务器接收客户端发来的消息并打印
                    String str = br.readLine();
                    //当客户端发来"bye"时,结束循环
                    if("bye".equalsIgnoreCase(str)) break;
                    System.out.println("张三说:" + str); 
                    //向客户端回发消息“I received!”
                    ps.println("I received!");
                }
                //4.关闭相关的套接字
                ps.close();
                br.close();
                s.close();
                ss.close();
            }catch(Exception e){
                e.printStackTrace();
            }
    
        }
    
    }
     
    2.再写客户端
    import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.net.Socket;
    
    public class TestClientString {
    
        public static void main(String[] args) {
            
            try{
                //1.创建Socket类型的对象,并指定IP地址和端口号
                Socket s = new Socket("192.168.99.234", 8888);
                //2.使用输入输出流进行通信
                /*
                //提示用户输入要发送的内容
                BufferedReader br = new BufferedReader(
                        new InputStreamReader(System.in));
                System.out.println("请输入要发送的内容:");
                String msg = "张三说:" + br.readLine();
                //让客户端向服务器发送数据"hello"
                PrintStream ps = new PrintStream(s.getOutputStream());
                //ps.println("hello");
                ps.println(msg);
                System.out.println("成功发送数据到服务器!");
                //等待接收服务器的回复,并打印回复的结果
                BufferedReader br2 = new BufferedReader(
                        new InputStreamReader(s.getInputStream()));
                String str2 = br2.readLine();
                System.out.println("服务器发来的消息是:" + str2);
                */
                BufferedReader br = new BufferedReader(
                        new InputStreamReader(System.in));
                PrintStream ps = new PrintStream(s.getOutputStream());
                BufferedReader br2 = new BufferedReader(
                        new InputStreamReader(s.getInputStream()));
                //编程实现客户端不断地和服务器进行通信
                while(true){
                    //提示用户输入要发送的内容
                    System.out.println("请输入要发送的内容:");
                    String msg = br.readLine();
                    ps.println(msg);
                    //当客户端发送"bye"时,结束循环
                    if("bye".equalsIgnoreCase(msg)) break;
                    //等待接收服务器的回复,并打印回复的结果
                    String str2 = br2.readLine();
                    System.out.println("服务器发来的消息是:" + str2);
                }
                //3.关闭Socket对象
                br2.close();
                br.close();
                ps.close();
                s.close();
            }catch(Exception e){
                e.printStackTrace();
            }
    
        }
    
    }
  • 相关阅读:
    iOS Provisioning Profile(Certificate)与Code Signing详解
    FW 常见的性能测试工具有: loadRunner/netperf/httperf/apache_ab/Apache JMeter
    android Instrumentation 转载
    FW 编译Android系统源码和内核源码
    FW 每秒百万级别的 HTTP 请求 sung: 重型的(heavy-duty)、分布式的、多协议测试工具
    Docker Hub Mirror
    MinGW安装和使用
    jdk,maven,tomcat 的环境配置
    错误400-The request sent by the client was syntactically incorrect
    pom.xml
  • 原文地址:https://www.cnblogs.com/penguin1024/p/11781318.html
Copyright © 2020-2023  润新知