标签:
如下例子实现了利用socket简易双向通信的例子
1.建立两个java project,目录如下
2.客户端代码
package client; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.Socket; public class Client { public static void main(String args[]) { try{ //创建客户端套接字 Socket socket = new Socket("127.0.0.1", 9999); //获取套接字输入流 InputStream is = socket.getInputStream(); DataInputStream dis = new DataInputStream(is); //获取套接字输出流 OutputStream os = socket.getOutputStream(); DataOutputStream dos = new DataOutputStream(os); //从键盘输入 InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); //聊天 String message; while (true) { //读取键盘输入的字符,写到客户端输出流 message = br.readLine(); dos.writeUTF(message); if(message.equals("88")) break; //读取服务器端的数据并打印到屏幕上 message = dis.readUTF(); System.out.println("服务器传回的消息:"+message); } //关闭流 dis.close(); dos.close(); socket.close(); }catch(Exception e) { e.printStackTrace(); } } }
3.服务器端代码
package server; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String args[]) { try { //创建一个ServerSocket,在端口号9999上监听客户端请求 ServerSocket serverSocket = new ServerSocket(9999); Socket socket = serverSocket.accept(); //获取客户端套接字的输出流 OutputStream os = socket.getOutputStream(); DataOutputStream dos = new DataOutputStream(os); //获取客户端输入流 InputStream is = socket.getInputStream(); DataInputStream dis = new DataInputStream(is); //创建字符输入流接受键盘输入 InputStreamReader isr= new InputStreamReader(System.in); BufferedReader br= new BufferedReader(isr); //消息 String message; while (true) { //获取客户端输入流 message = dis.readUTF(); System.out.println("客户端发过来消息:"+message); if(message.equals("88")) break; //读取键盘输入并写入到输出流 message = br.readLine(); dos.writeUTF(message); } dis.close(); dos.close(); serverSocket.close(); socket.close(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } }
4.调试
1>服务器端项目 Run as-->Java Application,可以打个log看下启动成功。
2>客户端项目 Run as-->Java Application,可以打个log看下启动成功。客户端运行起来后会覆盖服务端的log。
3>先将控制权调到客户端这边,即用鼠标点击客户端main方法,在控制台(console)里面输入客户端需要发送的消息,回车键即可发送。
此时控制台会输出消息客户端发过来消息:xxxxxxx(这是你自己输入的消息)
4>将控制权调到服务器这边,即用鼠标点击服务器端main方法,在控制台(console)里面输入服务器端需要发送的消息,回车键即可发送。
如下是调试截图
4.1 客户端输入,还未回车
4.2 客户端点击了回车键,服务器端收到的消息
4.3 接着,服务器端回消息
4.4 客户端再发消息
至此,完成了简单的即时通讯。
标签:
原文地址:http://my.oschina.net/u/2312022/blog/526467