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

Posted yfyfyf947

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了客户端服务端交互(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();
    }        
}

 

以上是关于客户端服务端交互(TCP) java的主要内容,如果未能解决你的问题,请参考以下文章

Linux-TCP编程流程-Socket编程-单线程实现TCP客户端和服务端交互-多进程实现TCP客户端和服务端交互

TCP网络程序实例——服务器端与客户端交互

Android上实现TCP服务端

c++ 网络编程TCP/IP linux 下多进程socket通信 多个客户端与单个服务端交互代码实现回声服务器

Java 通过实现简单的TCP通信程序来理解TCP通信

Java网络编程TCP程序,服务器和客户机交互流程以及基本操作步骤。