这就是一个简单的socket编程的实例,大道理就不说了,直接上代码,有代码才有真相。具体见代码里的注释。
服务器端:
package com.socket.server;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class P2PServer {
private ServerSocket server;
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public P2PServer() {
try {
try {
// 创建一个ServerSocket在指定端口监听客户请求
server = new ServerSocket(8099);
} catch (Exception e) {
System.out.println("can not listen to:" + e);
}
try {
// 使用accept()阻塞等待客户请求,有客户
socket = server.accept();
// 请求到来则产生一个Socket对象,并继续执行
} catch (IOException e) {
System.out.println("Error." + e);
// 出错,打印出错信息
}
/**
* 接收客户端写入的信息
*/
// 由Socket对象得到输入流,并构造相应的BufferedReader对象
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("from Client:" + in.readLine());
/**
* 将信息输出到客户端
*/
String line = "当然没问题";
System.out.println("from server to Client:" + line);
// 由Socket对象得到输出流,并构造PrintWriter对象
out = new PrintWriter(socket.getOutputStream());
// 向客户端输出该字符串
out.println(line);
// 刷新输出流,使Client马上收到该字符串
out.flush();
out.close(); // 关闭Socket输出流
in.close(); // 关闭Socket输入流
socket.close(); // 关闭Socket
server.close(); // 关闭ServerSocket
} catch (Exception e) {
System.out.println("Error:" + e);
}
}
public static void main(String[] args) {
new P2PServer();
}
}
客户端:
package com.socket.client;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class P2PClient {
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public P2PClient() {
try {
// 准备发送给服务器端的信息
String readline="hello ,服务端.我想请求你,可以吗 ";
/**
* 向服务器端发信息
*/
// 向XXX(可以使域名或IP地址,具体参见api)的8099端口发出客户请求
socket = new Socket("localhost", 8099);
// 由Socket对象得到输出流,并构造PrintWriter对象
out = new PrintWriter(socket.getOutputStream());
// 将readline字符串输出到Server
out.println(readline);
// 刷新输出流,使Server马上收到该字符串
out.flush();
/**
* 读取从服务器端返回信息
*/
// 由Socket对象得到输入流,并构造相应的BufferedReader对象
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 从Server读入一字符串,并打印到标准输出上
System.out.println("from Server:" + in.readLine());
out.close(); // 关闭Socket输出流
in.close(); // 关闭Socket输入流
socket.close(); // 关闭Socket
} catch (Exception e) {
System.out.println("Error" + e); // 出错,则打印出错信息
}
}
public static void main(String[] args) {
new P2PClient();
}
}