利用Java的Socket编程,实现一对一的C/S通信
包:
服务器端代码:
package user;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ServerSocket server = null;
try {
//创建一个ServerSocket在端口8093监听客户请求
server = new ServerSocket(8093);
}catch(Exception e) {
System.out.println("Error:"+e);
System.exit(-1);
}
Socket client = null;
try {
//使用accept()阻塞等待客户请求,有客户请求到来则产生一个Socket对象
client = server.accept();
}catch(Exception e) {
System.out.println("接受请求失败!");
System.exit(-1);
}
String inputString;
//由Socket对象得到输入流,并构造相应的BufferedReader对象
BufferedReader is = new BufferedReader(new InputStreamReader(client.getInputStream()));
//由Socket对象得到输出流,并构造相应的PrintWriter对象
PrintWriter os = new PrintWriter(client.getOutputStream());
//由系统标准输入设备构造BufferedReader对象
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
//在标准输出上打印从客户端读入的字符串
System.out.println("Client发送的消息为:"+is.readLine());
//从标准输入设备读入一个字符串
inputString = sin.readLine();
//如果该字符串为“quit”,则停止循环
while(inputString != null &&!inputString.trim().equals("quit")) {
//向客户端输出该字符串
os.println(inputString);
//刷新输出流,使Client马上收到该字符串
os.flush();
System.out.println("Server发送的消息为:"+inputString);
//从Client读入一个字符串,并打印到标准输出设备上
System.out.println("Client发送的消息为:"+is.readLine());
//从系统标准输入设备读入一个字符串
inputString = sin.readLine();
}
os.close(); //关闭Socket输出流
is.close(); //关闭Socket输入流
client.close(); //关闭Socket
server.close(); //关闭ServerSocket
System.out.println("聊天结束!");
}catch(Exception e) {
System.out.println("Error:"+e);
}
System.out.println("我是服务器");
}
}
客户端代码:
package user;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Socket server = null;
try {
String inputString;
server = new Socket("127.0.0.1",8093);
System.out.println("请输入信息:");
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
PrintWriter os = new PrintWriter(server.getOutputStream());
BufferedReader is = new BufferedReader(new InputStreamReader(server.getInputStream()));
inputString = sin.readLine();
while(inputString != null&&!inputString.trim().equals("quit")) {
os.println(inputString);
os.flush();
System.out.println("Client发送的消息为:"+inputString);
System.out.println("Server发送的消息为:"+is.readLine());
inputString = sin.readLine();
}
os.close();
is.close();
server.close();
System.out.println("聊天结束!");
}catch(UnknownHostException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
}
}
效果图: