亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

新手求教!使用序列化做的時候,我的服務器端拋出了空指針異常,該怎么修改呢?

服務器端

package com.imooc;


import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStream;

import java.io.ObjectInputStream;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.io.Writer;

import java.net.ServerSocket;

import java.net.Socket;

import java.net.UnknownHostException;


public class ObjectServer {


/**

* @param args

* @throws IOException?

* @throws UnknownHostException?

*/

public static void main(String[] args) throws IOException ?{

// Socket socket=new Socket("localhost", 8888);

// System.out.println("InetAddress:"+socket.getInetAddress());

ServerSocket serverSocket=new ServerSocket(8888);

Socket socket = null;

InputStream is=null;

OutputStream os = null;

ObjectInputStream ois=null;

BufferedReader br = null;

PrintWriter pw = null;

try {

is=socket.getInputStream(); ? ? ?//【】【】這里就是出錯的地方,第34行

ois=new ObjectInputStream(is);

String info;

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

System.out.println("我是服務器,客戶端說:"+info);

}

socket.shutdownInput();

os=socket.getOutputStream();

pw=new PrintWriter(os);

pw.write("歡迎您!");

pw.flush();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

if(is!=null)

is.close();

if(os!=null)

os.close();

if(ois!=null)

ois.close();

if(br!=null)

br.close();

if(pw!=null)

pw.close();

if(socket!=null)

socket.close();

}


}


}


客戶端

package com.imooc;


public class User {


private String userName;

private String userKey;

public User(String userName,String userKey){

this.userName=userName;

this.userKey=userKey;

}

}

package com.imooc;


import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.ObjectOutputStream;

import java.io.OutputStream;

import java.net.Socket;

import java.net.UnknownHostException;



public class ObjectClient {


/**

* @param args

*/


public static void main(String[] args) {

try {

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

System.out.println("InetAddress:"+socket.getInetAddress());

OutputStream os=socket.getOutputStream();

//使用ObjectOutputStream對象序列化流,傳遞對象

ObjectOutputStream oos=new ObjectOutputStream(os);

User user=new User("admin", "123");

oos.writeObject(user);//序列化

socket.shutdownOutput();

BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));

String info=br.readLine();

while(info!=null){

System.out.println("我是客戶端,服務器說:"+info);

// info=br.readLine();

}

} catch (UnknownHostException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}


}


運行服務器端ObjectServer類是拋出的異常如圖片所示http://img1.sycdn.imooc.com//579cb08a00015d2507230544.jpg

正在回答

2 回答

你的代碼寫錯了,服務器端socket是由serverSocket.accept();來初始化,這樣獲取客戶端傳來的數據,除此之外你的User類還需要實現序列化接口,implements Serializable,最好把set/get方法補上,JavaBean的習慣養好,另外如果報端口號占用的異常,你就把端口號改一下,因為你按老師步驟實踐可能8888端口之前已經用過了。

//1、創建一個服務器端Socket,即serverSocket,指定綁定的端口
		ServerSocket?serverSocket=new?ServerSocket(8801);
		//2、調用accept方法開始監聽,等待客戶端的連接
		System.out.println("***服務器即將啟動,等待客戶端的連接****");
		Socket?socket=serverSocket.accept();
		//3、獲取輸入流,并讀取客戶端信息
		InputStream?is=socket.getInputStream();//字節輸入流
		//反序列化
		ObjectInputStream?ois=new?ObjectInputStream(is);
		User?user=(User)ois.readObject();
		System.out.println("我是服務器,客戶端說:"+user.toString());


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

陳婉 提問者

非常感謝!
2016-08-01 回復 有任何疑惑可以回復我~

你可以在那行提示空指針的下面在寫一個}catch(NullPointerException e ){這樣就可以避免了,可以通過添加多個catch語句來規避遇到的多個異常。

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

舉報

0/150
提交
取消

新手求教!使用序列化做的時候,我的服務器端拋出了空指針異常,該怎么修改呢?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號