JAVA的TCP通信

TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象,从而在通信的两端形成网络虚拟链路,一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信。

Java对基于TCP协议的的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信Java为客户端提供了Socket类,为服务器端提供了ServerSocket类。

发送数据的步骤

创建客户端的 Socket 对象 (Socket)
获取输出流,写数据
释放资源
public class ClientDemo {
    public static void main(String[] args) throws IOException {
        Socket s=new Socket("202.199.6.226",12345); //建立连接的socket
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));//写数据流
        String line;
        while((line=br.readLine())!=null){
            if("886".equals(line))
                break;
            bw.write(line);
            bw.newLine();
            bw.flush();
            break;
        }
        s.shutdownOutput();//告诉服务器,上传结束
        //s.shutdownInput();
        BufferedReader br2=new BufferedReader(new InputStreamReader(s.getInputStream()));
        System.out.println(br2.readLine());
//        OutputStream out=s.getOutputStream();
//        out.write("tcp hello".getBytes());
//        InputStream in=s.getInputStream();
//        byte[] bys=new byte[1024];
//        int len=in.read(bys);
//        String data=new String(bys,0,len);
//        System.out.println(data);
        s.close();//释放资源
    }
}

接收数据的步骤

创建服务器端的 Socket 对象 ( ServerSocket )
获取输入流,读数据,并把数据显示在控制台
释放资源
public class ServerDemo {
    public static void main(String[] args) throws IOException {
        ServerSocket ss=new ServerSocket(12345); //建立帮助连接的socket
        Socket s=ss.accept();  //接收连接中传过来的socket
        BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));//打开读取数据流
        String line;
        while((line=br.readLine())!=null){
            System.out.println(line);
        }
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        bw.write("上传成功");//像客户端反馈
        bw.close();
//        InputStream is=s.getInputStream();
//        byte[] bys=new byte[1024];
//        int len=is.read(bys);
//        String data=new String(bys,0,len);
//        System.out.println("fuwuqi--  "+data);
//        OutputStream os=s.getOutputStream();
//        os.write("正常连接".getBytes());
//        s.close();
        ss.close();
    }
}

 

你可能感兴趣的:(网络,java)