网络编程,实现客户/服务器通信程序,写出程序主要框架即可.

网络编程,实现客户/服务器通信程序,写出程序主要框架即可.
要求:
1.客户端读取本地文件d;a.xml内容存于字节组,然后向服务器发送。服务器地址为ip:127.0.0.1,port=5000
2.服务器接收后将文件内容在控制台输出。

客户端
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 EchoClient {

private String host = "localhost";

private int port = 5000;

private Socket socket = null;

public EchoClient() throws UnknownHostException, IOException {
socket = new Socket(host, port);

}

public static void main(String g[]) throws UnknownHostException,
IOException {
new EchoClient().talk();
}

private PrintWriter getWriter(Socket socket) throws IOException {
OutputStream socketOut = socket.getOutputStream(); // 首先从socket对象中获得输出的空间,即输出流,
// 再传到PrintWriter类中。
return new PrintWriter(socketOut, true); // 创建PrintWriter类,参数一:输出流,
// 参数二:为boolean值,true表示每写一行,PrintWrinter缓存就自动溢出,把数据写到目的地.
}

private BufferedReader getReader(Socket socket) throws IOException {
InputStream socketIn = socket.getInputStream();// 首先从socket对象中获得输入流,再传到InputStreamReader类中。
return new BufferedReader(new InputStreamReader(socketIn));// 创建BufferedReader类,参数为InputStreamReader的对象.
}

public void talk() {
BufferedReader br;
try {
br = getReader(socket);

PrintWriter pw = getWriter(socket);

BufferedReader localReader = new BufferedReader(
new InputStreamReader(System.in));//在控制台中输入
String msg = null;
while ((msg = localReader.readLine()) != null) {
pw.println("Client:"+msg);
System.out.println(br.readLine());
if (msg.equals("bye")) {
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}

}

}
------------------------------------------------------------------
服务端
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 EchoServer {

private int port = 5000; // 端口

private ServerSocket serverSoket = null; // 创建一个服务器

public EchoServer() throws IOException {
serverSoket = new ServerSocket(port); // 实例化服务器,注意:记得输入端口号
System.out.println("服务器启动");

}

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

private PrintWriter getWriter(Socket socket) throws IOException {
OutputStream socketOut = socket.getOutputStream(); // 首先从socket对象中获得输出的空间,即输出流,
// 再传到PrintWriter类中。
return new PrintWriter(socketOut, true); // 创建PrintWriter类,参数一:输出流,
// 参数二:为boolean值,true表示每写一行,PrintWrinter缓存就自动溢出,把数据写到目的地.
}

private BufferedReader getReader(Socket socket) throws IOException {
InputStream socketIn = socket.getInputStream();// 首先从socket对象中获得输入流,再传到InputStreamReader类中。
return new BufferedReader(new InputStreamReader(socketIn));// 创建BufferedReader类,参数为InputStreamReader的对象.
}

public void service() {
while (true) {
Socket socket = null; // 创建一个客户端
try {
System.out.println("获得连接之前");
socket = serverSoket.accept(); // 等待客户连接,accept()将返回一个socket对象,即客户连接者。
System.out.println("获得连接之后");
System.out.println("New connection accepted"
+ socket.getInetAddress() + ":" + socket.getPort());
BufferedReader br = getReader(socket);// 创建BufferedReader的对象并实例化.
PrintWriter pw = getWriter(socket); // 创建PrintWriter的对象并实例化.
String msg = null;
while ((msg = br.readLine()) != null) {//br.readLine(),本次中只能读一次。
System.out.println(msg);
if (msg.equals("bye")) { //如果为bye那么就退出.
break;
}
BufferedReader tempbr = new BufferedReader(
new InputStreamReader(System.in));//在控制台中输出
String tempS = tempbr.readLine();
if (tempS.equals("bye")) { //如果为bye那么就退出.
break;
}
pw.println("Server:"+tempS); // 将所要回复的信息写到socket对象输出流中。
}

} catch (IOException e) {
e.printStackTrace();
} finally {
if (socket != null) {
try {
socket.close();//关闭客户端
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

}

public static void main(String[] g) throws IOException {
new EchoServer().service();
}

}
温馨提示:答案为网友推荐,仅供参考
相似回答