问答详情
源自:3-4 完善用户登陆之服务器响应客户端

求大神带飞,客户端向服务端发送信息成功,却收不到响应,怎么回事?

package com.tcp;


import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;


public class Server {

/**

* 服务器端

*/


public static void main(String[] args) {

int port = 8818;

try {

// 1.创建ServerSocket实例

ServerSocket serverSocket = new ServerSocket(port);

System.out.println("***服务器即将启动,正在等待客户机连接***");

// 调用accept()方法接收来自客户机的Socket

Socket clintSocket = serverSocket.accept();

// 2.创建字节输入流

InputStream is = clintSocket.getInputStream();

// 创建字符输入流

InputStreamReader isr = new InputStreamReader(is);

// 给字符输入流创建缓冲

BufferedReader br = new BufferedReader(isr);

String date = null;


// 3.当读取数据不为空时,循环读取

while ((date = br.readLine()) != null) {

System.out.println("我是服务端,客户端连接成功!");

System.out.println("接收到登陆请求,验证信息如下:");

System.out.println(date);

}


// 4.返回给客户端反馈信息

OutputStream os = clintSocket.getOutputStream();

// 将输出流包装为打印流

PrintWriter pw = new PrintWriter(os);

pw.write("欢迎您,在渣男路上越走越远,登陆成功");

pw.flush();

// 5.关闭所有资源

//clintSocket.shutdownOutput();

pw.close();

os.close();

clintSocket.shutdownInput();// 关闭输入流

br.close();

isr.close();

is.close();

clintSocket.close();

serverSocket.close();


} catch (IOException e) {


e.printStackTrace();

}

}


}



package com.tcp;


import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.io.Writer;

import java.net.Socket;

import java.net.UnknownHostException;


public class Clint {

/**

* 客户端

*/

public static void main(String[] args) {

String sss="用户名:在渣男路上越走越远   密码:123456";

try {

//1.创建客户端Socket

Socket socket = new Socket("localhost", 8818);

//2.创建输出流

OutputStream os=socket.getOutputStream();

//将输出流包装为打印流

PrintWriter pw=new PrintWriter(os);

//3.调用writer()方法写入内容

pw.write("用户名:在渣男路上越走越远   密码:123456");

pw.flush();

System.out.println("******登陆界面******");

System.out.println(sss);

System.out.println("正在请求登陆......");

//4.接收来自服务器的反馈信息

InputStream is=socket.getInputStream();

//创建字符输入流

InputStreamReader isr=new InputStreamReader(is);

//给字符输入流创建缓冲

BufferedReader br =new BufferedReader(isr);

String date1 = null;

//当读取数据不为空时,循环读取

while ((date1 = br.readLine()) != null) {

System.out.println(date1);

}

//5.关闭资源

//socket.shutdownInput();//关闭输入流

br.close();

isr.close();

is.close();

socket.shutdownOutput();

pw.close();

os.close();

//socket.close();

} catch (UnknownHostException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}


}


}


提问者:溺鲸 2019-03-05 20:19

个回答

  • Eagle_Lin
    2019-05-12 10:47:38

    你应该在客户端进行输出流完成之后就应该socket.shutdownOutput();而不是在最后才执行