- public class Client {
- public static void main(String args[]) throws Exception {
- //为了简单起见,所有的异常都直接往外抛
- String host = "127.0.0.1"; //要连接的服务端IP地址
- int port = 8899; //要连接的服务端对应的监听端口
- //与服务端建立连接
- Socket client = new Socket(host, port);
- //建立连接后就可以往服务端写数据了
- Writer writer = new OutputStreamWriter(client.getOutputStream());
- writer.write("Hello Server.");
- writer.flush();//写完后要记得flush
- writer.close();
- client.close();
- }
- }
对于客户端往Socket的输出流里面写数据传递给服务端要注意一点,如果写操作之后程序不是对应着输出流的关闭,而是进行其他阻塞式的操作(比如从输入流里面读数据),记住要flush一下,只有这样服务端才能收到客户端发送的数据,否则可能会引起两边无限的互相等待。在稍后讲到客户端和服务端同时读和写的时候会说到这个问题。
BufferedReader的readLine方法是一次读一行的,这个方法是阻塞的,直到它读到了一行数据为止程序才会继续往下执行,那么readLine什么时候才会读到一行呢?直到程序遇到了换行符或者是对应流的结束符readLine方法才会认为读到了一行,才会结束其阻塞,让程序继续往下执行。所以我们在使用BufferedReader的readLine读取数据的时候一定要记得在对应的输出流里面一定要写入换行符(流结束之后会自动标记为结束,readLine可以识别),写入换行符之后一定记得如果输出流不是马上关闭的情况下记得flush一下,这样数据才会真正的从缓冲区里面写入。
时间: 2024-10-20 20:30:43