java 网络编程 java.NullPointerException

jiangtianyin 2010-04-11 08:56:05
今天刚接触Java网络编程,跟着书上做了一个简单的客户端与服务器通信例子,结果老是报异常,不知道那里出错了,由于是第一次接触,不知道是不是需要配置什么东西,我直接就开始写代码了,特来请教各位高手

EchoServer.java 为服务器端程序,代码如下:

import java.io.*;
import java.net.*;

public class EchoServer
{
private int port=8000;
private ServerSocket svSocket;

public EchoServer() throws IOException
{
ServerSocket svSocket=new ServerSocket(port);
System.out.println("服务器启动!");
}

public String echo(String msg){
return "echo: "+msg;
}

private PrintWriter getWriter(Socket sk) throws IOException{
OutputStream out=sk.getOutputStream();
return new PrintWriter(out,true);
}

private BufferedReader getReader(Socket sk) throws IOException{
InputStream in=sk.getInputStream();
return new BufferedReader(new InputStreamReader(in));
}

public void service()
{
while(true)
{
Socket sk=null;
try
{
sk=svSocket.accept(); //通过使用输出语句测试好像是这里抛出了异常
System.out.println("new connection accepted: "+sk.getInetAddress()+":"+sk.getPort());
BufferedReader br=getReader(sk);
PrintWriter pw=getWriter(sk);

String msg=null;
while((msg=br.readLine())!=null)
{
System.out.println(msg);
pw.println(echo(msg));
if(msg.equals("bye"))
{
break;
}
}
}
catch(IOException ex)
{
ex.printStackTrace();
}
finally
{
try
{
if(sk!=null)
sk.close();
}
catch(IOException ex)
{
ex.printStackTrace();
}
}
}
}

public static void main(String [] args) throws IOException
{
System.out.println("hello");
new EchoServer().service();
}
}


运行时抛出异常:
Exception in thread "main" java.lang.NullPointerException
at EchoServer.service(EchoServer.java:38)
at EchoServer.main(EchoServer.java:77)


EchoClient.java为客户端程序,代码如下:

import java.io.*;
import java.net.*;
import java.util.*;

public class EchoClient{
private String host="localhost";
private int port=8000;
private Socket sk;

public EchoClient() throws IOException{
sk=new Socket(host,port);
}

public static void main(String[] args) throws IOException{
new EchoClient().talk();
}
private PrintWriter getWriter(Socket sk) throws IOException{
OutputStream out=sk.getOutputStream();
return new PrintWriter(out,true);
}

private BufferedReader getReader(Socket sk) throws IOException{
InputStream in=sk.getInputStream();
return new BufferedReader(new InputStreamReader(in));
}

public void talk() throws IOException{
try{
BufferedReader br=getReader(sk);
PrintWriter pw=getWriter(sk);
BufferedReader localReader=new BufferedReader(new InputStreamReader(System.in));

String msg=null;
while((msg=localReader.readLine())!=null){
pw.println(msg);
System.out.println(br.readLine());
if(msg.equals("bye"))
break;
}
}catch(IOException e){
e.printStackTrace();
}finally{
try{
sk.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
}



抛出异常:Exception in thread "main" java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at EchoClient.<init>(EchoClient.java:11)
at EchoClient.main(EchoClient.java:15)
...全文
54 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangtianyin 2010-04-11
  • 打赏
  • 举报
回复
不是这个问题吧,我的main()方法中写的是 new EchoServer().service();会先到用构造方法
public EchoServer() throws IOException
{
ServerSocket svSocket=new ServerSocket(port);
System.out.println("服务器启动!");
}
在这里就已经实例化了
fulinkster 2010-04-11
  • 打赏
  • 举报
回复
private ServerSocket svSocket;

public EchoServer() throws IOException
{
ServerSocket svSocket=new ServerSocket(port);
System.out.println("服务器启动!");
}

然后你public void service()里的 sk=svSocket.accept(); 根本没实例化!
  • 打赏
  • 举报
回复
EchoServer 38 行报错了呗,不知道 38 行是哪一行

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧