实现简单的聊天室的功能,代码呢我只写了一方面的(即客户端发往服务端的)其实只写一端的代码就足够了
那么怎么才能实现聊天实的功能呢,就是要再将代码复制一份,两个人在两台PC上运行代码即可。
那么运行的时候需要修改什么呢,就是要需要修改一下IP地址和端口号。
Ip地址和端口号遵循这个员原则:客户端(发送端)设置的端口号要和服务端(接收端)的端口号相对应。
这样才能保证通信的畅通。(还不明白的在去看下面的main函数,再不明白的加我QQ私聊我)
客户端:将数据打包,然后附上接收方的IP地址,然后将数据发送出去。
服务端:接收数据,然后将数据拆包,进行数据包的解析。
InetAddress类;
获取IP地址
将IP地址以字符串的形式表示出来
此方法中的参数可以为Ip地址额字符串形式。
DatagramSocket类;
DatagramPacket类;
获得发送数据的长度
获得发送数据的内容
下面两个类是用来读数据的
字节流的形式读取,然后用高效字节流缓冲区来高效读取
BufferedRead类;
InputStreamReader类;
package com.klj.chatroomS;import java.DatagramPacket;
import java.DatagramSocket;
import java.InetAddress;public class ChatRoomServer implements Runnable {/*** 聊天室的服务端 1、创建套接字对象,指定服务端口 2、接收客户端发送过来的数据包 3、对数据包进行解析 4、关闭服务*/private int port;public void setPort(int port) {this.port = port;}public int getPort() {return port;}@Overridepublic void run() {DatagramSocket ds = null;try {/*** 接收数据包*/// 创建套接字对象,必须指定端口,接口一般大于8000ds = new DatagramSocket(port);byte[] bytes = new byte[1024];// 创建数据包,用来装数据DatagramPacket dp = new DatagramPacket(bytes, bytes.length);System.out.println("====服务端已启动,等待接收数据====");while(true) {// 接收数据包ds.receive(dp);/*** 解析数据包*/// 获取到数据包的IP地址InetAddress iadd = dp.getAddress();// 获取到数据包中的数据byte[] bytes1 = dp.getData();// 获得到接收数据的长度int length = dp.getLength();// 重新组装接收到的数据,即:将字节转换成字符串String data = new String(bytes1, 0, length);if ("exit".equals(data)) {System.out.println("数据发送完毕");}// 输出数据System.out.println("服务端" + HostAddress() + "接收了:" + data);System.out.println("请再次输入您要发送的数据:");}} catch (Exception e) {e.printStackTrace();} finally {// 关闭套接字,释放资源。if (ds != null) {ds.close();}}}}
package com.klj.chatroomS;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.DatagramPacket;
import java.DatagramSocket;
import java.InetAddress;public class ChatRoomClient implements Runnable {//声明ip地址和端口。private String ip;private int port;//设置set和get方法int getPort() {return port;}void setPort(int port) {this.port = port;}public String getIp() {return ip;}public void setIp(String ip) {this.ip = ip;}@Overridepublic void run() {/*** 客户端的代码 1、将数据进行封装,并附上IP地址 2、发送数据 3、关闭服务*/BufferedReader br = null;DatagramSocket ds = null;try {ds = new DatagramSocket();System.out.println("请输入您要发送的数据:");/*** 打包数据*/while (true) {br = new BufferedReader(new InputStreamReader(System.in));String str = br.readLine();// 定义数据包中要发送的的内容byte[] bytes = Bytes();int length = bytes.length;// 创建要发送的目的地的IPInetAddress address = ByName(ip);// 打包数据DatagramPacket dp = new DatagramPacket(bytes, length, address, port);// 发送数据ds.send(dp);}} catch (Exception e) {e.printStackTrace();} finally {if (ds != null) {ds.close();}if (br != null) {try {br.close();} catch (IOException e) {e.printStackTrace();}}}}}
package com.klj.chatroomS;public class Run {public static void main(String[] args) {//创建服务端对象ChatRoomServer chatroomserver = new ChatRoomServer();chatroomserver.setPort(12234);//创建客户端对象ChatRoomClient chatroomclient = new ChatRoomClient();chatroomclient.setIp("192.168.43.163");chatroomclient.setPort(12233);//创建线程Thread serverThread =new Thread(chatroomserver);Thread cilentThread =new Thread(chatroomclient);//启动线程serverThread.start();cilentThread.start();}}
package com.klj.chatroomXS;public class Run {public static void main(String[] args) {// 创建服务端对象ChatRoomServer chatroomserver = new ChatRoomServer();chatroomserver.setPort(12233);// 创建客户端对象ChatRoomClient chatroomclient = new ChatRoomClient();chatroomclient.setIp("192.168.43.163");chatroomclient.setPort(12234);// 创建线程Thread serverThread = new Thread(chatroomserver);Thread cilentThread = new Thread(chatroomclient);// 启动线程serverThread.start();cilentThread.start();}}
最后附上的我的QQ:3030363140(有三个验证问题,第一个问题输上你的名字,其余的可以随便写),欢迎大家骚扰哦。
本文发布于:2024-01-27 19:01:34,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063532942040.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |