为了账号安全,请及时绑定邮箱和手机立即绑定

读取和响应合起来出错了

服务器从客户端读取用户名,密码。没问题

服务器响应客户端,发送“欢迎您”。没问题

但读取用户名和密码之后响应“欢迎您”就会报错???!!!

为什么各自执行没问题合起来就出错了呢?(代码和老师的一样

正在回答

4 回答

这么跟你说吧,你代码肯定跟老师不一样,我想应该是你的关闭socket输入输出流的顺序有问题。

截图跟你看:服务器端,这三步要依次来,这是有原因的

http://img1.sycdn.imooc.com//573e7f8e0001021808350671.jpg

客户端:对应的顺序也不能颠倒,你做到了这些,包你没问题,妥妥的

http://img1.sycdn.imooc.com//573e80010001a38807850674.jpg

0 回复 有任何疑惑可以回复我~
#1

Helios_ 提问者

非常感谢!
2016-05-22 回复 有任何疑惑可以回复我~

源码给你

客户端:

package com.imooc.ServerAndClient;

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.Socket;
import java.net.UnknownHostException;

public class Client {

	public static void main(String[] args) throws UnknownHostException {
		
		try {
			// 创建socket,指定服务器端的ip地址和端口
			Socket socket = new Socket("localhost", 6666);
			// 获取输出流,向服务器端发送信息
			OutputStream outputStream = socket.getOutputStream();
			// 将输出流转换成打印流
			PrintWriter pw = new PrintWriter(outputStream);
			pw.print("用户名:root;密码:123");
			pw.flush();
			// 关闭socke流
			socket.shutdownOutput();
            // 开始读取客户端信息
			
			InputStream inputStream = socket.getInputStream();
			InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
			BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
			String info = null;
			while ((info = bufferedReader.readLine()) != null) {
				System.out.println("客户端接受服务器端信息:" + info);
			}
			// 关闭socke流
			socket.shutdownInput();			
			//关闭其他资源
			bufferedReader.close();
			inputStreamReader.close();
			inputStream.close();
			pw.close();
			outputStream.close();
			socket.close();
			
 		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}

}

服务器端:

package com.imooc.ServerAndClient;

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;

/**
 * 实现基于TCP协议的Socket通信--Server服务端
 * 
 * @author ykp
 * 
 */
public class Server {

	public static void main(String[] args) {

		try {
			// 创建一个服务器端的Socket实例
			ServerSocket serverSocket = new ServerSocket(6666);
			System.out.println("服务器即将启动,等待客户端连接....");
			// 调用accept()方法监听端口,等待客户端的连接
			Socket socket = serverSocket.accept();
			// 获取输入流,读取客户端信息
			InputStream inputStream = socket.getInputStream();
			// 将字节流转换成字符流
			InputStreamReader inputStreamReader = new InputStreamReader(
					inputStream);
			// 给字符输入流添加缓冲
			BufferedReader bufferedReader = new BufferedReader(
					inputStreamReader);
			String info = null;
			while ((info = bufferedReader.readLine()) != null) {
				System.out.println("服务器接受客户端信息:" + info);
			}
			// 关闭socket输出流和socket输入流
			socket.shutdownInput();
			// 服务器向客户端发送信息
			OutputStream outputStream = socket.getOutputStream();
			PrintWriter pw = new PrintWriter(outputStream);
			pw.print("欢迎你!");
			pw.flush();
			
			// 关闭socket输出流和socket输入流
			socket.shutdownOutput();
			
			// 关闭其他资源
			pw.close();
			outputStream.close();
			bufferedReader.close();
			inputStreamReader.close();
			inputStream.close();

			//关闭socket
			socket.close();
			serverSocket.close();
		} catch (IOException e) {

			e.printStackTrace();
		}

	}

}


0 回复 有任何疑惑可以回复我~

代码都不给 怎么给你答案

0 回复 有任何疑惑可以回复我~

服务器从客户端读取用户名,密码。没问题

服务器响应客户端,发送“欢迎您”。没问题

没看懂,从这两句话得出服务器可以读取客户端数据;客户端可以读取服务器数据。

0 回复 有任何疑惑可以回复我~
#1

Helios_ 提问者

服务器读取客户端数据、服务器向客户端发送数据。这两个功能分开执行没问题,但将代码放到一起之后就出错(两个功能不能同时实现
2016-04-25 回复 有任何疑惑可以回复我~
#2

菜鸟555 回复 Helios_ 提问者

给全部代码看看。
2016-04-27 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

读取和响应合起来出错了

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信