最近写了一个小程序,关于socket连接的,分为客户端和服务端,服务端在指定的端口等待客户端连接,针对不同的客户端建立一个线程去处理请求,客户端则想服务端建立连接,这个可以传输excel文件,也可以生成excel文件,具体看代码吧,注释的挺清楚的。。。
一共4个文件。SocketClient.java代表客户端对象,SockeServer.java代表服务端,Connection.java为多线程处理,ReaderWriterFile.java为处理读写文件的对象。
SocketClient.java
package socket;
import java.io.*;
import java.net.*;
public class SocketClient {
public Socket soc;// 与服务端连接的套接字对象
public String host;// 连接到得主机
public int port;// 端口
public SocketClient(String host, int port) {
super();
this.host = host;
this.port = port;
}
// 初始化
public void init() {
try {
// 连接到指定的主机的指定端口
soc = new Socket(host, port);
System.out.println("connecting" + soc);
System.out.println("连接到服务器。。。");
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
System.out.println("未知服务器异常: " + e);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 进行连接处理
public void connect() {
try {
// 封装从服务端的输入流
BufferedReader in = new BufferedReader(new InputStreamReader(soc.getInputStream()));
// 封装到服务端的输出流
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(soc.getOutputStream())), true);
// 从服务端收到的信息
String receive_msg = in.readLine();
System.out.println("服务器说:" + receive_msg);
// 封装控制台输入流
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
// 不断的与服务端进行交互,直到客户端输入了quit
while (true) {
// 从控制台读取数据
String send_msg = stdin.readLine().trim();
// 将读取的数据发送到服务端
out.println(send_msg);
// 如果输入离开则断开连接,释放资源
if ("quit".equals(send_msg)) {
try {
in.close();
out.close();
} catch (IOException e) {
System.out.println("socket关闭异常。。" + e);
}
break;
}
// 如果是请求文件
if (send_msg.trim().startsWith("get")) {
System.out.println("从服务端获取的文件内容如下:");
// 将读取到的所有字符串StringBuffer穿起来
receive_msg = null;
StringBuffer result = new StringBuffer();
// 不断获取文件内容,直到遇到文件传输结束标志(end的md5的16位加密结果)
while (!(receive_msg = in.readLine()).equals("15b86f2d013b2618")) {
result.append(receive_msg + "\n");
}
System.out.println(result.toString() + "\n文件