Java通过TCP实现聊天功能
2013-09-23 15:21
661 查看
1、首先得明白TCP/UDP的区别:
TCP:传输安全,基本不会丢包,Client端发送消息Server端一定的回复,不然就会一直等待和不能再发,(可以去看哈TCP的3次握手)。
UDP:传输不安全,可能会丢包,比如通过网线传输时候网线过长电信号减弱,就会导致丢包,或者路由器接受的请求过多,你的请求得排队,时间长了可能就会丢掉,UDP不管是否建立连接,只管往对方发数据(不管对方响应与否都可以往对方发数据)。应用:很多网络游戏、QQ(比如视频聊天有些时候视频会卡,断断续续的)等。
下面写的“退出”应该是“推出”-------------------------------
2、Server端代码:
3、Client端代码:
TCP:传输安全,基本不会丢包,Client端发送消息Server端一定的回复,不然就会一直等待和不能再发,(可以去看哈TCP的3次握手)。
UDP:传输不安全,可能会丢包,比如通过网线传输时候网线过长电信号减弱,就会导致丢包,或者路由器接受的请求过多,你的请求得排队,时间长了可能就会丢掉,UDP不管是否建立连接,只管往对方发数据(不管对方响应与否都可以往对方发数据)。应用:很多网络游戏、QQ(比如视频聊天有些时候视频会卡,断断续续的)等。
下面写的“退出”应该是“推出”-------------------------------
2、Server端代码:
package com.mqp.server; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; /** * tcp协议的服务器端 * * @author Administrator * * tcp中客服端是Socket,服务器端是ServerSocket udp(user * data)中DatagramPacket,DatagramSocket通过数据包和数据插口进行连接和传输 * */ // 这是一个典型的TCP的传输模式,一方请求,另一方必须应答,否则,就会无限的等待 // 这就是和UDP的区别,UDP不考虑接受方是否接到请求(不管是否双方已经连接上),只管发送自己的消息 // 生活的大部分游戏和很多应用都是采用UDP协议 // 现在Java退出了异步传输机制,所以很大部分不会用到TCP协议 public class TCP_Server { public static void main(String[] args) { try { ServerSocket server = new ServerSocket(8888);// 服务器端开启端口监听 Socket socket = server.accept();// 接受连接 // 接受客服端发送的消息 BufferedReader br = new BufferedReader(new InputStreamReader( socket.getInputStream())); System.out.println("客服端:" + br.readLine());// 输出屏幕上得到的数据 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter( socket.getOutputStream()));// 获得输出流 PrintWriter pw = new PrintWriter(bw); // 获得屏幕输入的数据 BufferedReader reader = new BufferedReader(new InputStreamReader( System.in)); String readline = reader.readLine(); while (!"bye".equalsIgnoreCase(readline)) { pw.println(readline);// 获得屏幕的数据输出到客服端 pw.flush(); System.out.println("服务器端:" + readline);// 输出屏幕上得到的数据 System.out.println("客服端:" + br.readLine());// 输出屏幕上得到的数据 readline = reader.readLine();// 继续读取 } br.close(); pw.flush(); pw.close(); reader.close(); System.exit(0);// 没循环了系统退出 } catch (IOException e) { e.printStackTrace(); System.out.println("端口号监听异常!"); } } }
3、Client端代码:
package com.mqp.tcp; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; import java.sql.ResultSet; public class TCP_Client { public static void main(String[] args) { try { // 注意:对于客服端的端口号不一定是8888,这是由客服端的PC机自动分配的,每一次用的端口号可能都不一样 Socket socket = new Socket("localhost", 8888); BufferedReader br = new BufferedReader(new InputStreamReader( System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter( socket.getOutputStream())); PrintWriter pw = new PrintWriter(bw); // 获得服务器端发送的数据 BufferedReader reader = new BufferedReader(new InputStreamReader( socket.getInputStream())); String readline = br.readLine(); while (!"bye".equalsIgnoreCase(readline)) { pw.println(readline); pw.flush(); System.out.println("客服端:" + readline);// 输出屏幕上得到的数据 System.out.println("服务器端:" + reader.readLine());// 输出屏幕上得到的数据 readline=br.readLine();//继续读取下一行的数据上 } br.close(); pw.flush(); pw.close(); System.exit(0);// 系统退出 } catch (UnknownHostException e) { e.printStackTrace(); System.out.println("找不到服务器IP!"); } catch (IOException e) { e.printStackTrace(); System.out.println("连接服务器异常!"); } } }
相关文章推荐
- java TCP/IP实现简单的多人聊天功能
- java 使用TCP实现单聊的功能。(客户端和服务端聊天)
- Java一步一脚印—通过简单的TCP网络编程实现局域网的聊天对话
- java WebSocket实现聊天消息推送功能
- 通过java实现txt,ppt,pdf上传之后转换为swf文件的功能实现
- java实现把对象数组通过excel方式导出的功能
- Java通过SMS短信平台实现发短信功能
- JAVA实现通过绑定邮箱找回密码功能
- 基于TCP和UDP的聊天功能的实现
- Java通过SMS短信平台实现发短信功能
- JAVA实现通过绑定邮箱找回密码功能
- java 通过Spark实现单词计数的功能
- IT忍者神龟之Java通过SMS短信平台实现发短信功能
- Java通过SMS短信平台实现发短信功能
- Java通过SMS短信平台实现发短信功能
- java Smack整合Openfire服务器实现IM即时通讯聊天功能
- java网络编程,通过TCP,Socket实现多对一的局域网聊天室
- Java通过 Socket 实现 TCP服务端(一个实例)
- Java TCP、IO流实现简单机器人聊天系统
- java网络编程,通过TCP,Socket实现多对一的局域网聊天室