Java中使用TCP协议的Socket通信

使用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();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/pipizhen_/article/details/107673249