整理了JAVA 网络编程的一个“对讲机”式的小实例,采取“一问一答”的方式。首先简介ServerSocket 和 Socket 通讯的过程,下面是一张Socket通信模型的图片。
ServerSocket ss = new ServerSocket(9999);
Socket s1 = ss.accept();
首先,服务器在本机 9999 端口监听,等待客户端的连接。
Socket s2 = new Socket("127.0.0.1",9999);
此时,Socket s2 尝试连接本机的 9999 端口,建立一个通讯的“道路”。
接下来,通过Socket,使用输入输出流发送或接收数据。通讯结束后,关闭Socket连接和各类流。
以下是代码:
import java.net.*;
import java.io.*;
import java.util.*;
/**
* @name 服务端
* @author chenyongjun
* @time 2013-03-23
* */
public class Server {
public static void main(String [] args){
try {
ServerSocket serverSocket = new ServerSocket(8888); // 服务端在本机 8888 端口监听
System.out.println("服务器在 8888 端口监听...");
Socket socket = serverSocket.accept(); // 等待客户端连接
System.out.println("客户端成功连接服务器...");
// 获取输入输出流
PrintWriter sendMesToClient = new PrintWriter(socket.getOutputStream(),true);
BufferedReader readMesFromClient = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader readMesFromConsole = new BufferedReader(new InputStreamReader(System.in));
// 进行“对讲机”式通讯
while (true){
String mesFromClient = readMesFromClient.readLine(); // 读取来自客户端的消息
System.out.println("客户端说:" + mesFromClient); // 将读取的消息显示在控制台
// 如果客户端说 "bye",结束通话,关闭各类流和Socket,结束 while()循环
if (mesFromClient.equals("bye")){
System.out.println("通话结束!");
readMesFromClient.close();
sendMesToClient.close();
readMesFromConsole.close();
socket.close();
break;
}
// 向客户端发送消息
System.out.println("请输入你想对客户端说的话");
String mesFromConsole = readMesFromConsole.readLine(); // 从控制台输入要发送的消息
sendMesToClient.println(mesFromConsole); // 向客户端发送消息
sendMesToClient.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
import java.io.*;
import java.net.*;
public class Client extends Thread{
public static void main(String[] args) {
try {
Socket socket = new Socket("127.0.0.1",8888); // 连接本机 8888 端口上的服务器
// 获取输入输出流
BufferedReader readMesFromServer = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter sendMesToServer = new PrintWriter(socket.getOutputStream());
BufferedReader readMesFromConsole = new BufferedReader(new InputStreamReader(System.in));
// 进行“对讲机”式通讯
while(true){
// 向服务器发送消息
System.out.println("请输入对服务器说的话");
String mesFromConsole = readMesFromConsole.readLine();
sendMesToServer.println(mesFromConsole);
sendMesToServer.flush();
// 读取服务器的消息
String mesFromSer = readMesFromServer.readLine();
System.out.println("服务器说:" + mesFromSer);
// 如果服务器说 “bye”,则中断通讯,关闭各类流和Socket,结束while()循环
if (mesFromSer.equals("bye")){
System.out.println("通话结束!");
readMesFromServer.close();
readMesFromConsole.close();
sendMesToServer.close();
socket.close();
break;
}
}
} catch (Exception e) {
// TODO: handle exception
}
}
}
本文提供了一个简单的Java网络编程实例,利用ServerSocket和Socket实现"对讲机"式的通信。首先,ServerSocket在9999端口监听,等待Socket连接。然后,Socket尝试连接该端口,创建通信通道。通过Socket的输入输出流交换数据,通信完毕后关闭连接。
6044

被折叠的 条评论
为什么被折叠?



