基于UDP实现聊天室功能

2025-05-29 0 81

本文实例为大家分享了UDP实现聊天室功能的具体代码,供大家参考,具体内容如下

项目结构

基于UDP实现聊天室功能

data.java

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20
package udp;

import java.net.InetAddress;

public class data {

InetAddress Address;

int Port;

public InetAddress getAddress() {

return Address;

}

public void setAddress(InetAddress address) {

Address = address;

}

public int getPort() {

return Port;

}

public void setPort(int port) {

Port = port;

}

}

服务器端

Server.java

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84
package udp;

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

import java.util.ArrayList;

public class Server {

DatagramSocket socket = null;

ArrayList<data> client;

public Server() {

try {

socket = new DatagramSocket(8888);

} catch (SocketException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

client = new ArrayList<data>();

}

public void s_r(){

try {

while(true) {

byte[] buf = new byte[3000];

//接收数据的数据包

DatagramPacket packet = new DatagramPacket(buf,buf.length);

socket.receive(packet);

//地址

InetAddress clientAddress = packet.getAddress();

//端口号

int clientPort = packet.getPort();

data d = new data();

d.setAddress(clientAddress);

d.setPort(clientPort);

int i=0;

//判断客户端集合里是否存在发送新消息的客户端

for(;i<client.size();i++) {

if(client.get(i).getAddress().equals(clientAddress)&&client.get(i).getPort()==clientPort) {

break;

}

}

if(i==client.size()) {

client.add(d);

}

String s=new String(packet.getData()).trim()+"来自:"+clientAddress.getHostAddress()+":"+clientPort;

System.out.println(s);

//把信息发给每个客户端

for(data c:client) {

try {

//地址

InetAddress cAddress = c.getAddress();

//端口号

int cPort = c.getPort();

buf = s.getBytes();

//创建要发送的数据包

packet = new DatagramPacket(buf,buf.length,cAddress,cPort);

socket.send(packet);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

} catch (SocketException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally {

if(socket!=null)socket.close();

}

}

public static void main(String[] args) {

Server s = new Server();

s.s_r();

}

}

客户端

package udp;

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90
import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

import java.net.UnknownHostException;

public class Client {

DatagramSocket socket = null;

DatagramPacket packet;

InetAddress address = null;

Client(){

try {

socket = new DatagramSocket();

} catch (SocketException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public void s_r() {

try {

// 把表示服务器端IP地址的字符串转换成InetAddress对象

address = InetAddress.getByName("127.0.0.1");

} catch (UnknownHostException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

String s = "登陆";

byte[] b = s.getBytes();

packet = new DatagramPacket(b,b.length,address,8888);

try {

socket.send(packet);

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

//发送消息的线程

new Thread(new Runnable() {

@Override

public void run() {

// TODO Auto-generated method stub

String sendStr;

BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));

try {

while((sendStr = stdIn.readLine())!=null) {

byte[] buf = sendStr.getBytes();

packet = new DatagramPacket(buf,buf.length,address,8888);

socket.send(packet);

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}).start();

//接收消息的线程

new Thread(new Runnable() {

@Override

public void run() {

// TODO Auto-generated method stub

byte[] buf_1 = new byte[3000];

// 使用空字节数组构造空数据包

DatagramPacket packet = new DatagramPacket(buf_1,buf_1.length);

try {

while(true) {

socket.receive(packet);

String received = new String(packet.getData(),0,packet.getLength()).trim();

System.out.println("接收到的信息:"+received);

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}).start();

}

public static void main(String[] args) {

Client c = new Client();

c.s_r();

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

原文链接:https://blog.csdn.net/qq_43496829/article/details/104553025

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 基于UDP实现聊天室功能 https://www.kuaiidc.com/104921.html

相关文章

发表评论
暂无评论