欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java中使用TCP协议的Socket通信

程序员文章站 2022-04-12 22:09:31
使用TCP的Socket通信:基本测试代码:客户端:package tcpsocket;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;/* 客服端: 创建Socket连接服务器(指定IP地址,端口号) 调用Socket的getInputStream()和getOutputStream()方法获取输入输出流 输入流可以读取服务器...

使用TCP协议的Socket通信:

基本测试代码:
客户端:

package tcpsocket;

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

/*
    客服端:
        创建Socket连接服务器(指定IP地址,端口号)
        调用Socket的getInputStream()和getOutputStream()方法获取输入输出流
        输入流可以读取服务器传过来的数据
        输出流可以写出数据到服务器

 */
public class Demo1_Client {
    public static void main(String[] args) throws Exception {

        // 获取服务器的IP地址,端口号
        Socket socket = new Socket("127.0.0.1", 9999);

        // 获取客服端的输入输出流
        InputStream in = socket.getInputStream();
        OutputStream out = socket.getOutputStream();

        // 接收服务器发送过来的数据
        byte[] bytes = new byte[1024];
        int len = in.read(bytes);
        System.out.println(new String(bytes, 0, len));

        // 向服务器发送数据
        out.write("挖掘机哪家强?".getBytes());

        // 客服端关闭连接
        socket.close();
    }
}

服务器端:

package tcpsocket;

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

/*
    服务器端:
        创建ServerSocket(需要指定端口号)
        调用ServerSocket的accept()方法接收一个客服端请求,得到一个Socket
        调用Socket的getInputStream()和getOutputStream()方法获取和客服端连接的输入输出流
        输入流可以获取客户端发送过来的数据
        输出流可以发送信息返回客服端

 */
public class Demo1_Server {
    public static void main(String[] args) throws Exception {

        // 创建服务器
        ServerSocket server = new ServerSocket(9999);

        while (true) {
            // 获取客服端的Socket
            Socket clientSocket = server.accept();

            // 获取与客服端连接的输入输出流
            InputStream in = clientSocket.getInputStream();
            OutputStream out = clientSocket.getOutputStream();

            // 发送数据到客服端
            out.write("百度一下,你就知道!".getBytes());

            // 接收客服端发送过来的数据
            byte[] bytes = new byte[1024];
            int len = in.read(bytes);
            System.out.println(new String(bytes, 0, len));

            // 断开与此用户的连接
            clientSocket.close();
        }
    }
}

例题:
客户端从键盘输入字符串,提交到服务器。
服务器将此用户发送过来的字符串反转后,返回给用户。
要求服务器用多线程方式接收多个用户的提交。

客户端:

package tcpsocket;

import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Demo2_Client {
    public static void main(String[] args) throws UnknownHostException, IOException {

        Scanner sc = new Scanner(System.in); //创建键盘录入对象
        Socket socket = new Socket("127.0.0.1", 11111); //创建客户端,指定ip地址和端口号

        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));	//获取输入流
        PrintStream ps = new PrintStream(socket.getOutputStream()); //获取输出流

        ps.println(sc.nextLine()); //将字符串写到服务器去
        System.out.println(br.readLine()); //将反转后的结果读出来

        socket.close();
    }
}

服务器端:

package tcpsocket;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Demo2_Server {
    public static void main(String[] args) throws Exception {

        ServerSocket server = new ServerSocket(11111);

        while(true) {
            final Socket socket = server.accept(); //接受客户端的请求

            new Thread() { //开启一条线程
                public void run() {
                    try {
                        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));	//获取输入流
                        PrintStream ps = new PrintStream(socket.getOutputStream());//获取输出流

                        String line = br.readLine(); //将客户端写过来的数据读取出来
                        line = new StringBuilder(line).reverse().toString();
                        ps.println(line); //反转后写回去

                        socket.close();
                    } catch (IOException e) {

                        e.printStackTrace();
                    }
                }
            }.start();
        }
    }
}

本文地址:https://blog.csdn.net/pipizhen_/article/details/107673249

相关标签: JavaSE