Java简单实现UDP和TCP的示例

2025-05-29 0 93

tcp实现

tcp协议需要在双方之间建立连接,通过输入输出流来进行数据的交换,建立需要通过三次握手,断开需要四次挥手,保证了数据的完整性,但传输效率也会相应的降低。

Java简单实现UDP和TCP的示例

简单的tcp实现

?

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
//服务端

public class tcpserver {

public static void main(string[] args) throws ioexception {

serversocket serversocket = new serversocket(8886); // 建立服务端,ip为本机ip,端口为8886

socket accept = serversocket.accept(); // 监听客户端的连接,一旦有客户端连接,则会返回客户端对应的accept

inputstream in = accept.getinputstream(); //获取到客户端的输出流

byte b[] = new byte[1024];

int len = in.read(b);

system.out.println("接受到客户端数据,返回数据"+new string(b,0,len));

outputstream out = accept.getoutputstream(); // 给客户端发送消息

out.write("服务端已经接受".getbytes());

serversocket.close();

}

}

// 客户端

public class tcpclient {

public static void main(string[] args) throws ioexception {

socket socket = new socket("127.0.0.1", 8886); // 通过socket来建立和服务端的连接

outputstream out = socket.getoutputstream(); // 获取输出流(客户端输出流即向服务端输出信息)

out.write("hello tcp server".getbytes()); // 输出信息

inputstream in = socket.getinputstream(); // 接受服务端的消息

byte b[] = new byte[1024];

int len = in.read(b);

system.out.println("接受到服务器消息 : "+new string(b,0,len)); // 输出

out.write("返回的的数据已经收到 ".getbytes()); // 向服务器返回消息

socket.close();

}

}

改进服务端,启用多线程来接受客户端的数据

?

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
// server

public static void main(string[] args) throws ioexception {

serversocket serversocket = new serversocket(8886); // 建立服务端,ip为本机ip,端口为8886

int i=4;

while(i>2){

socket accept = serversocket.accept(); // 监听客户端的连接,一旦有客户端连接,则会返回客户端对应的accept

serverthread st = new serverthread(accept); // 启动线程

thread th = new thread(st);

th.start();

}

serversocket.close();

}

// thread

public class serverthread implements runnable {

private socket accept;

public serverthread(socket s) {

this.accept = s;

}

public void run(){

inputstream in;

try {

in = accept.getinputstream();

byte b[] = new byte[1024];

int len = in.read(b);

system.out.println("接受到客户端数据,返回数据" + new string(b, 0, len));

outputstream out = accept.getoutputstream(); // 给客户端发送消息

out.write("服务端已经接受".getbytes());

} catch (ioexception e) {

e.printstacktrace();

}

}

}

传递图片

?

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
// 服务端

public class server {

public static void main(string[] args) throws ioexception {

serversocket serversocket = new serversocket(5555);

socket ss = serversocket.accept();

bufferedinputstream br = new bufferedinputstream(ss.getinputstream());

bufferedoutputstream bw = new bufferedoutputstream(new fileoutputstream("copy.jpg")); // 写出文件流

byte b[] = new byte[1024];

int len = 0;

while ((len = br.read(b)) != -1) { // 写出文件

bw.write(b, 0, len);

bw.flush(); // 别忘了刷新,要不然最后一块缓冲区字符串会缺失

}

bufferedwriter bw2 = new bufferedwriter(new outputstreamwriter(ss.getoutputstream())); // 输出

bw2.write("图片传输成功");

bw2.flush();

bw.close();

ss.close();

}

}

// 客户端

public class client {

public static void main(string[] args) throws unknownhostexception, ioexception {

socket socket = new socket("127.0.0.1", 5555);

bufferedinputstream in = new bufferedinputstream(new fileinputstream("c.jpg"));

bufferedoutputstream out = new bufferedoutputstream(socket.getoutputstream());

byte b[] = new byte[1024];

int len = 0;

while ((len = in.read(b)) != -1) {

out.write(b, 0, len);

out.flush(); // 刷新缓冲区 要不然最后一块缓冲区字符串会缺失

}

socket.shutdownoutput(); // 关闭流以后server段才会接收道结束字符结束接受

bufferedreader br = new bufferedreader(new inputstreamreader(socket.getinputstream()));

string line;

while ((line = br.readline()) != null) {

system.out.println(line);

}

in.close();

socket.close();

}

}

udp实现

udp是将数据打成数据包向对方发送,只关系是否发送成功,而不关心是否接收成功,传输速度快,但是可靠性低。

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
// 发送端

public class senddemo {

public static void main(string[] args) throws ioexception {

datagramsocket ds = new datagramsocket(); // 此类表示用来发送和接收数据报包的套接字。

bufferedreader br = new bufferedreader(new inputstreamreader(system.in)); // 键盘输入

string line = null;

while ((line = br.readline()) != null) {

byte[] bytes = line.getbytes();

datagrampacket dp = new datagrampacket(bytes, bytes.length, inetaddress.getbyname("127.0.0.1"), 10005); // 数据包对象

ds.send(dp);

if ("886".equals(line)) { // 当输入886时结束发送

break;

}

}

ds.close();

}

}

// 接收端

public class recivedemo {

public static void main(string[] args) throws ioexception {

datagramsocket ds = new datagramsocket(10005); // 建立服务端

byte bytes[] = new byte[1024];

datagrampacket dp = new datagrampacket(bytes, bytes.length); // 建立数据包对象

while (true) {

ds.receive(dp); // 接受数据包

byte[] data = dp.getdata(); // 获取数据

string str = new string(data, 0, dp.getlength());

if ("886".equals(str)) {

break;

}

system.out.println(str);

}

ds.close();

}

}

以上这篇java简单实现udp和tcp的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持快网idc。

原文链接:http://www.cnblogs.com/liyuhui-Z/p/7794829.html

收藏 (0) 打赏

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

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

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

快网idc优惠网 建站教程 Java简单实现UDP和TCP的示例 https://www.kuaiidc.com/114158.html

相关文章

发表评论
暂无评论