TCP通信 -- 接收并反馈(全)

TCP通信整体过程:

    1.【服务端】启动,创建ServerSocket对象,等待连接。
    2.【客户端】启动,创建Socket对象,请求连接。
    3.【服务端】接收连接,调用accept方法,并返回一个Socket对象。
    4.【客户端】Socket对象,获取OutputStream,向服务端写出数据。
    5.【服务端】Scoket对象,获取InputStream,读取客户端发送的数据。

TCP通信 -- 接收并反馈(全)_第1张图片

 客户端(发送数据)

 1.创建Socket通信管道     
 2.获取IO流对象(输出)   
 3.写数据              
 4.释放资源   
Socket socket = new Socket("IP地址",端口号);
OutputStream os = socket.getOutputStream();
os.write("需要写入的数据"); //可以进行流的增强
os.close();

服务端(接收数据)

 1.创建ServerScoket通信管道  
 2.连接客户端Socket对象(监听方法)     
 3.获取IO流对象(输入)       
 4.读数据                  
 5.释放资源    
ServerSocket ss = new ServerSocket(端口号);
Socket socket = ss.accept();
InputStream is = socket.getInputStream();
int ch = is.read(); //可以进行流的增强
is.close();

 

记住就只有俩个点:建立通信管道获取输入输出流 + 同时写接收数据(易)和传输数据(涉及到键盘输入)

客户端代码:

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

/*
TCP通信 --2接收并反馈
* */
public class Client {
    public static void main(String[] args) throws IOException {
        System.out.println("===客户端启动===");
        //1、创建Socket通信管道 并连接至服务端
        Socket socket = new Socket(InetAddress.getLocalHost(),9999);

        //2、通过Socket管道 获得一个字节输出流
        OutputStream os = socket.getOutputStream();
        PrintStream ps = new PrintStream(os);//打印字节流就要将字节流os传参
        Scanner sc = new Scanner(System.in);
        while(true){
            System.out.println("请输入信息:");
            String msg = sc.nextLine();
            ps.println(msg);
            ps.flush();

            //接收服务端反馈
            BufferedReader bfr = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String Msg = bfr.readLine();
            System.out.println("服务端返回信息:" + Msg);

        }


    }
}

服务端

package com.itheima.b02TCPTest2;

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

public class Server {
    public static void main(String[] args) throws IOException {
        System.out.println("===服务端启动===");
        //1、创建serversocket对象
        ServerSocket ss = new ServerSocket(9999);

        //2、通过socket通信管道 将监听信息返回
        Socket socket = ss.accept();

        //3、接收信息 收到的字节流 转换为字符流 再加上缓冲流
        BufferedReader bfr = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        //readLine 缓冲流读取的方法
        String msg;
        while((msg = bfr.readLine()) != null){
            System.out.println(socket.getRemoteSocketAddress() + "发送信息:" + msg);

            //服务端返回信息
            System.out.println("请输入你想回复的信息:");
            OutputStream os = socket.getOutputStream();

            PrintStream ps = new PrintStream(os);
            Scanner sc = new Scanner(System.in);
            ps.println(sc.nextLine());
            ps.flush();
        }
        
    }
}

你可能感兴趣的:(java网络编程,tcp/ip,网络,java)