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

Posted 小茅棚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程 实现 客户端与服务器端的简单通信相关的知识,希望对你有一定的参考价值。

六,代码演示实现客户端与服务器端的简单通信
 
代码中所使用的 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();
        }

    }

}

 

以上是关于网络编程 实现 客户端与服务器端的简单通信的主要内容,如果未能解决你的问题,请参考以下文章

python编程系列---tcp服务端的简单实现

java 界面编程用socket实现服务端与客户端的循环通信。

Python socket编程客户端与服务端通信

WCF - 创建简单WCF客户端实现与WCF服务端通信

网络编程——TCP协议和通信

Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息