JAVA实现网络客户端和服务端简单通信1(逐渐加深)详细

JAVA实现网络客户端和服务端简单通信1(逐渐加深)详细,第1张

网络编程的三要素
1、IP地址:唯一标识网络上的每一台计算机两台计算机之间通信的必备要素
2、端口号:计算机中应用的标号(代表一个应用程序) 0-1024系统使用或保留端口 ,
有效端口0-65536
3、通信协议:通信的规则TCP,UDP

1.创建客户端与服务端

实现客户端对服务器简单的通信后全部结束运行

客户端

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

  模拟客户端向服务器发送一条消息

  public class Client {

    public static void main(String[] args) throws IOException {
        //创建Socket套接字对象
        Socket client = new Socket("DESKTOP-IU5NLRI",10086);
        //从socket中获取输出流
        OutputStream outputStream = client.getOutputStream();
        //使用DataOutputStream包装流
        DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
        //发送一条信息给服务器
        dataOutputStream.writeUTF("你好,服务器,我是客户端!");
        //关闭资源
        dataOutputStream.close();
        outputStream.close();
        client.close();
    }

}

注:

DESKTOP-IU5NLRI是我电脑名

 

服务器

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;


 服务器程序
 
public class Server {

    public static void main(String[] args) throws IOException {
        //创建ServerSocket对象
        ServerSocket serverSocket = new ServerSocket(10086);
        System.out.println("**********************服务器已开启... ...**********************");

        //开启一个监听
//accept   监听到这个套接字的连接并接受它。该方法将阻塞,直到建立连接。
        Socket socket = serverSocket.accept();

        //从socket对象中获取输入流
//InputStream  返回一个不读取字节的新的[@code InputStream]。返回的流最初是打开的。方法关闭流* [@code close()]方法。对f@code close())的后续调用没有效果。
//getInputStream   返回此套接字的输入流。如果此套接字具有关联的通道,则生成的输入流将其所有 *** 作委托给该通道。如果通道处于非阻塞模式,则输入流的f@code read) *** 作将抛出一个[@link java.nio。频道。
        InputStream inputStream = socket.getInputStream();

        //使用DataInputStream包装流
//DataInputStream 和 DataOutputStream 是数据字节流,分别继承自 FilterInputStream 和 FilterOutputStream 和 实现了 DataInput 和 DataOutput。用来装饰其他的字节流。

//DataInputStream:数据字节输入流,用来装饰其他的输入流,允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用 DataOutputStream (数据字节输出流)写入由 DataInputStream (数据字节输入流)读取的数据。
//DataOutputStream :数据字节输出流,用来装饰其他输出流,将 DataOutputStream 和 DataInputStream 输入流配合使用,允许应用程序以与机器无关方式从底层输入流中读写基本 Java 数据类型。
        DataInputStream dataInputStream = new DataInputStream(inputStream);
        //读取从客户端发送过来的数据
        String a = dataInputStream.readUTF();
        System.out.println("客户端说:" + a);
        //关闭资源
        dataInputStream.close();
        inputStream.close();
        socket.close();
        serverSocket.close();

    }
}

运行图

 2.两者互相通信

完毕后结束

客户端

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;


public class Client2 {

    public static void main(String[] args) throws IOException {
        //创建Socket对象
        Socket client = new Socket("127.0.0.1",10000);
        //从socket中获取输出流
        //向服务器发送一条消息
        OutputStream outputStream = client.getOutputStream();
        outputStream.write("你好,服务器,我是客户端!".getBytes());

        //接收服务器响应的消息
        InputStream inputStream = client.getInputStream();
        //读取服务器响应回来的数据
        byte[] buffer = new byte[1024];
        int length = inputStream.read(buffer);
        System.out.println("服务器说:" + new String(buffer,0,length));

        //关闭资源
        inputStream.close();
        outputStream.close();
        client.close();

    }
}



服务器

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server2 {

    public static void main(String[] args) throws IOException {
        //创建ServerSocket对象
        ServerSocket serverSocket = new ServerSocket(10000);
        System.out.println("**********************服务器已开启... ...**********************");
        //开启监听
        Socket server = serverSocket.accept();
        //接收从客户端发送的消息
        InputStream inputStream = server.getInputStream();
        byte[] buffer = new byte[1024];
        int length = inputStream.read(buffer);
        System.out.println("客户端说:" +new String(buffer,0,length));

        //服务器向客户端响应一条消息
        OutputStream outputStream = server.getOutputStream();
        //向客户端传输数据
        outputStream.write("我已收到你的消息,我是服务器!".getBytes());

        //关闭资源
         outputStream.close();
         inputStream.close();
         server.close();
         serverSocket.close();
    }
}

3.实现多次对话

public class Client3 {

    public static void main(String[] args) throws IOException {
        //创建Socket对象
        for (int i = 1; i <= 5; i++) {
            Socket client = new Socket("127.0.0.1",10000);
            //从socket中获取输出流
            //向服务器发送一条消息


            OutputStream outputStream = client.getOutputStream();
            outputStream.write("你好,服务器,我是客户端!".getBytes());

            //接收服务器响应的消息
            InputStream inputStream = client.getInputStream();
            //读取服务器响应回来的数据
            byte[] buffer = new byte[1024];
            int length = inputStream.read(buffer);
            System.out.println("服务器第" + i + "次说:" + new String(buffer, 0, length));


            //关闭资源
            inputStream.close();
            outputStream.close();
            client.close();

        }
    }
}



public class Server3 {

    public static void main(String[] args) throws IOException {
        System.out.println("**********************服务器已开启... ...**********************");
        for (int i = 1; i <= 5; i++) {
            //创建ServerSocket对象
            ServerSocket serverSocket = new ServerSocket(10000);

            //开启监听

            Socket server = serverSocket.accept();
            //接收从客户端发送的消息
            InputStream inputStream = server.getInputStream();
            byte[] buffer = new byte[1024];
            int length = inputStream.read(buffer);
            System.out.println("客户端第" + i + "次说:" + new String(buffer, 0, length));

            //服务器向客户端响应一条消息
            OutputStream outputStream = server.getOutputStream();
            //向客户端传输数据
            outputStream.write("我已收到你的消息,我是服务器!".getBytes());

            //关闭资源
            outputStream.close();
            inputStream.close();
            server.close();
            serverSocket.close();
        }
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/798402.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-06
下一篇2022-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存