zoukankan      html  css  js  c++  java
  • 网络编程 实现 客户端与服务器端的简单通信

    六,代码演示实现客户端与服务器端的简单通信
     
    代码中所使用的 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();
            }
    
        }
    
    }
  • 相关阅读:
    macbook 无声音解决方案
    webapck dev server代理请求 json截断问题
    百度卫星地图开启
    服务器 nginx配置 防止其他域名绑定自己的服务器
    记一次nginx php配置的心路历程
    遇到npm报错read ECONNRESET怎么办
    运行svn tortoiseSvn cleanup 命令失败的解决办法
    svn add 命令 递归目录下所有文件
    m4出现Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib."
    Ubuntu下安装GCC,mpc、mpfr、gmp
  • 原文地址:https://www.cnblogs.com/penguin1024/p/11781318.html
Copyright © 2011-2022 走看看