java怎么测试socket,简单的Java Socket测试

先把代码贴出来:

/**tcps.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

importjava.io.*;

importjava.net.*;

importjava.util.Scanner;

publicclasstcps

{

publicstaticvoidmain(String[]args)

{

if(args.length!=1)

{

System.out.println("usage: tcps ");

System.exit(0);

}

server(args[0]);

}

publicstaticvoidserver(Stringport)

{

intPort=Integer.parseInt(port);

try{

ServerSocketss=newServerSocket(Port);

Sockets=ss.accept();

//OutputStream os=s.getOutputStream();

PrintWriterpw=newPrintWriter(s.getOutputStream(),true);

//InputStream is=s.getInputStream();

Scannersc=newScanner(s.getInputStream());

//byte[] buf=new byte[100];

//os.write("welcome".getBytes());

pw.println("welcome tcp client");

//int len=is.read(buf);

//System.out.println(new String(buf,0,len));

Stringmesg=sc.nextLine();

System.out.println(mesg);

//is.close();

//os.close();

s.close();

ss.close();

}

catch(Exceptionex)

{

ex.printStackTrace();

}

}

}

/**tcpc.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

importjava.io.*;

importjava.net.*;

importjava.util.Scanner;

publicclasstcpc

{

publicstaticvoidmain(String[]args)

{

if(args.length!=2)

{

System.out.println("usage: udpc ");

System.exit(1);

}

client(args[0],args[1]);

}

publicstaticvoidclient(Stringaddr,Stringport)

{

StringSrvAddr=addr;

intPort=Integer.parseInt(port);

try{

Sockets=newSocket(InetAddress.getByName(SrvAddr),Port);

//OutputStream os=s.getOutputStream();

PrintWriterpw=newPrintWriter(s.getOutputStream(),true);

//InputStream is=s.getInputStream();

Scannersc=newScanner(s.getInputStream());

byte[]buf=newbyte[100];

//os.write("this is client".getBytes());

pw.println("this is tcp client");

//int len=is.read(buf);

//System.out.println(new String(buf,0,len));

System.out.println(sc.nextLine());

//is.close();

//os.close();

s.close();

}

catch(Exceptionex)

{

ex.printStackTrace();

}

}

}

/**udps.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

importjava.io.*;

importjava.net.*;

publicclassudps

{

publicstaticvoidmain(String[]args)

{

if(args.length!=1)

{

System.out.println("usage: udps ");

System.exit(0);

}

server(args[0]);

}

publicstaticvoidserver(Stringport)

{

intPort=Integer.parseInt(port);

try

{

DatagramSocketserv=newDatagramSocket(Port);

byte[]buf=newbyte[100];

DatagramPacketdp=newDatagramPacket(buf,100);

serv.receive(dp);

System.out.println(newString(dp.getData(),0,dp.getLength()));

Stringstr="welcome udp client";

DatagramPacketdps=newDatagramPacket(str.getBytes(),str.length(),

dp.getAddress(),dp.getPort());

serv.send(dps);

serv.close();

}

catch(Exceptionex)

{

ex.printStackTrace();

}

}

}

/**udpc.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

importjava.io.*;

importjava.net.*;

publicclassudpc

{

publicstaticvoidmain(String[]args)

{

if(args.length!=2)

{

System.out.println("usage: udpc ");

System.exit(1);

}

client(args[0],args[1]);

}

publicstaticvoidclient(Stringaddr,Stringport)

{

try{

DatagramSocketcli=newDatagramSocket();

Stringstr="this is udp client";

StringSrvAddr=addr;

intPort=Integer.parseInt(port);

DatagramPacketdp=newDatagramPacket(str.getBytes(),str.length(),

InetAddress.getByName(SrvAddr),Port);

cli.send(dp);

byte[]buf=newbyte[100];

DatagramPacketdpr=newDatagramPacket(buf,buf.length);

cli.receive(dpr);

System.out.println(newString(buf,0,dpr.getLength()));

cli.close();

}

catch(Exceptionex)

{

ex.printStackTrace();

}

}

}

看一下运行的结果:

8ab704f8a7850d5775ca5660ec7dea82.png

在本地上运行,所有的地址都可以解析,唯一的遗憾就是没有办法抓到本地的包,否则可以看一下数据通信是什么样子的。另外一点就是现在的交换机好像都不支持IPv6协议,我在机房的一台linux上连接本地Win7上的服务,用v6地址时提示无法到达的路由。

上面代码的基本结构来自于孙鑫老师的Java课程,里面有些内容比较过时了(课程是基于JDK1.4版本的),所以后面又找了一些Java资料,重新改写了InputStream和OutputStream的一些内容,否则在使用JDK7的javac编译时会提示使用了一些废弃的接口==提示。

总之,用Java测试socket还是比较简单的,相比C下面的就容易多了,而且不用考虑IPv4和IPv6等复杂的地址关系,Java可以同时处理这两种类型的地址协议,只需要getHostByName()就可以自动赋值v4或者v6地址,而且ServerSocket会自动绑定本地所有的v4和v6的地址,很方便于使用。我这也是现学现卖(看变量名就知道了),连Java的基础数据结构和语法还都没有记清楚,只能做几个小例子自娱自乐一下,过两天把C的socket测试例子修改修改,也发上来对比一下。

相关

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值