【Socket编程二】利用Socket实现聊天通信的编程实例
2017-02-17 16:28
323 查看
利用Socket实现聊天通信的编程实例
在上文中,介绍了Socket相关的内容以及Socket编程的入门实例,本篇文章将写一个利用Socket实现客户端服务器聊天的小程序。话不多说,眼见为实,先上图:
服务器:
客户端:
其中绿色字为对应客户端/服务器输入内容,黑色字是对方回应内容。
DataInputStream/DataOutputStream
在code实例中,用到了DataInputStream/DataOutputStream,而并没有直接使用InputStream 和 OutputStream 来读写数据,主要是DataOutputStream中有个很方便的方法:readUTF(),可以直接读取String 类型的数据,而不用按字节读取,很方便。
以下是其和nputStream/OutputStream 的区别:
DataInputStream类继承了InputStream,也就是说DataInputStream是InputStream的子类,但它们同是实现了DataInput接口;
DataInputStream比普通的InputStream多一些方法,自行查看;
在从文件中读出数据时,不用费心地自行判断读入字符串时或读入int类型时何时该停止,使用对应的readUTF()或readInt()方法就可以正确地读入完整类型数据。同样地,DataInputStream、DataOutputStream并没有改变InputStream或OutputStream的行为,读入或写出时的动作还是InputStream、OutputStream负责。
下面是code:
客户端:
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class ChatClient { public void ClientService(){ Socket socket = null; DataOutputStream out = null; DataInputStream in = null; try { socket = new Socket("localhost", 9090); System.out.println("客户端开启成功"); //OutputStream流用来发送信息到服务器 out = new DataOutputStream(socket.getOutputStream()); //InputStream用来获取来自服务器反馈的消息 in = new DataInputStream(socket.getInputStream()); Scanner sc = new Scanner(System.in); while(true){ //控制面板中输入信息并发送给服务器 String inputMsg = sc.nextLine(); // System.out.println("【客户端输入信息:】" + inputMsg); out.writeUTF(inputMsg); //读取服务器信息 String recvMsgFromServer = in.readUTF(); System.out.println("【From服务器】" + recvMsgFromServer); } } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ if(in != null){ try { in.close(); } catch (IOException e) { e.printStackTrace(); } } if(out != null){ try { out.close(); } catch (IOException e) { e.printStackTrace(); } } if(socket != null){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static void main(String[] args) { System.out.println("客户端正在启动。。。"); new ChatClient().ClientService(); } }
服务器:
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class ChatServer { public void ServerService(){ ServerSocket ss = null; Socket socket = null; DataOutputStream out = null; DataInputStream in = null; try { ss = new ServerSocket(9090); System.out.println("服务器开启监听"); socket = ss.accept(); //InputStream用来接收客户端的消息 in = new DataInputStream(socket.getInputStream()); //OutputStream流用来发送反馈信息到客户端 out = new DataOutputStream(socket.getOutputStream()); Scanner sc = new Scanner(System.in); while(true){ //读取来自客户端信息 String recvMsgFromServer = in.readUTF(); System.out.println("【From客户端】" + recvMsgFromServer); //控制面板中输入信息并发送给客户端 String inputMsg = sc.nextLine(); //System.out.println("【服务器端输入信息:】" + inputMsg); out.writeUTF(inputMsg); } } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ if(ss != null){ try { ss.close(); } catch (IOException e) { e.printStackTrace(); } } if(in != null){ try { in.close(); } catch (IOException e) { e.printStackTrace(); } } if(out != null){ try { out.close(); } catch (IOException e) { e.printStackTrace(); } } if(socket != null){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static void main(String[] args) { System.out.println("服务器正在启动。。。"); new ChatServer().ServerService(); } }
参考资料:【http://blog.csdn.net/yy_love_my/article/details/26609613】
相关文章推荐
- DirectX编程:C#中利用Socket实现网络语音通信[初级版本]
- java socket编程(3)——利用socket实现聊天之群聊
- Socket编程服务端和客户端互相通信,实现简单的聊天
- DirectX编程:C#中利用Socket实现网络语音通信
- DirectX编程:C#中利用Socket实现网络语音通信
- 利用C#进行Socket通信编程之二:一个实例
- 利用C#进行Socket通信编程之二:一个实例
- DirectX编程:C#中利用Socket实现网络语音通信[初级版本]
- java socket编程(2)——利用socket实现聊天之单聊
- java socket编程(3)——利用socket实现聊天之群聊
- DirectX编程:C#中利用Socket实现网络语音通信[初级版本]
- DirectX编程:C#中利用Socket实现网络语音通信[初级版本]
- Android利用Socket(TCP)通信实现即时聊天
- 利用C#进行Socket通信编程之二:一个实例
- java socket编程(4)——利用socket实现聊天之上传文件
- Java Socket聊天室编程(一)之利用socket实现聊天之消息推送
- 利用socket TCP协议实现客户端与服务端简单通信
- DirectX编程:C#中利用Socket实现网络语音通信[初级版本]
- DirectX编程:C#中利用Socket实现网络语音通信[初级版本]
- 利用Tcp和socket实现的客户端与服务端的简单通信