我正在尝试使用套接字进行基本的网络程序服务器:
import java.io.*;
import java.net.*;
class Socketserver{
public static void main(String[]z)throws IOException{
System.out.println("Server is started");
ServerSocket ss=new ServerSocket(9999);
System.out.println("Waiting for client request");
Socket s=ss.accept();
System.out.println("client connected");
InputStreamReader a=new InputStreamReader(s.getInputStream());
BufferedReader b=new BufferedReader(a);
String str=b.readLine();
System.out.println("Client data"+str);
String nickname=str.substring(0,3);
OutputStreamWriter os=new OutputStreamWriter(s.getOutputStream());
PrintWriter out=new PrintWriter(os);
out.write(str);
os.flush();
System.out.println("data sent from server to client");
}}
客户端
import java.io.*;
import java.net.*;
class Socketclient{
public static void main(String[]z)throws IOException{
String ip="localhost";// for same machine
int port=9999;
Socket s=new Socket(ip,port);
String str="Rujhaan";
OutputStreamWriter os=new OutputStreamWriter(s.getOutputStream());
PrintWriter out=new PrintWriter(os);
out.write(str);
os.flush();
InputStreamReader a=new InputStreamReader(s.getInputStream());
BufferedReader b=new BufferedReader(a);
String nickname=b.readLine();
System.out.println("data from server"+nickname);
}
}
程序编译,并且服务器上没有问题,但是运行客户端总是会拒绝连接或连接时间超出例外。我尝试了不同的端口名称,也没有防火墙问题。请建议我该怎么办....
问题是函数读取线。规范说该方法读取流,直到收到新行(" n"(
http://docs.oracle.com/javase/7/docs/api/java/io/bufferedreader.html#readline((
将输入字符串更改为
String str="Rujhaann";
将有效或替代客户关闭客户端上的输出流以终止数据传输。
out.close();