客户端服务端交互(TCP) java

需求:建立客户端与服务端,客户端从键盘输入字符串到服务端,服务端向客户端返回字符串的大写形式。

 

在开始写代码之前,我要先给大家温习一下IO流中缓存区的flush()方法。如下图,服务要向客户端发送数据,为了高效地传输数据,输出流中会有一个缓冲区,而只有缓冲区被填满时,缓冲区才向客户端发送数据,若没有填满,则会一直等待被填满。但是如果我们要传输的数据就是不能把缓冲区填满的,那怎么办呢?这时就体现出flush()方法的重要性,该方法会强制将缓冲区中的数据传输到目的地。

 

1.客户端

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {
    public static void main(String[] args) throws UnknownHostException, IOException 
    {
        System.out.print("客户端启动");
        Socket s=new Socket("10.192.9.100",10006);
        //创建从键盘录入的读入流
        BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
        //创建从内存到socket流中的输出流
        BufferedWriter out=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        //创建从socket流到内存的读入流
        BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
        
        String line=null;
        while((line=bufr.readLine())!=null)
        {
            if(line.equals("over"))
                break;
            //如果没有\r\n的话,服务器端的while中的readLine()就会一直等待转行符而不进行下面的程序
            out.write(line+"\r\n");
            //如果不刷新的话,由于缓冲区没有被填满,因此不会发送数据
            out.flush();
            String upperStr=bufIn.readLine();
            System.out.print(upperStr);
        }
        s.close();
    }
}

2.服务端

由于服务端中的注意事项和客户端是一样的,就不再注释了

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws IOException
    {
        System.out.print("服务端启动");
        ServerSocket ss=new ServerSocket(10006);
        Socket s=ss.accept();
        BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
        
        //PrintWriter out = new PrintWriter(s.getOutputStream(),true);
        BufferedWriter out=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        
        String line=null;
        while((line=bufIn.readLine())!=null)
        {
            System.out.print(line);
            out.write(line.toUpperCase()+"\r\n");
            out.flush();
        }
        s.close();
        ss.close();
    }        
}

 

posted on 2018-06-14 19:01  yfyfyf947  阅读(555)  评论(0编辑  收藏  举报