如何用java实现网络通信
发布网友
发布时间:2022-04-25 21:35
我来回答
共1个回答
热心网友
时间:2022-06-17 17:35
你说的我明白。如果真正使用alohal协议的时候,所有的机器都可以检测网络电平变化的是吧?但是使用Java编写模拟程序的话,我们并不能可能检测电平的变换,只能通过一定的手段来模拟这个过程。如果你将一个包裹群发,这样所有的机器都可以接受这个包,这样就可以做到所有机器模拟检测电平变化的这个要求。我认为这个是最有说服力的模拟方法了。
线程需要使用Thread类型,重写里面的run函数,调用start()启动线程,具体可以搜索一把Thread,例子遍地都是。
UDP协议使用Socket类型,初始化的时候参数里面绑定(或者初始化好以后直接调用bind绑定端口,一般输出不用绑定,监听的时候需要绑定)。调用里面的getOutputStream得到输入流。调用getInputStream得到输入流。
OutputStream:输出流,用于向网络中输出数据。调用其中的write函数进行输出,函数的参数就是输出的byte数组。
InputStream: 输入流,用于接受网络里面的数据。调用其中的read可以得到输入的包。
String:你要输出的字符串,调用里面的getBytes可以得到String的byte数组。
其它的应该用不到什么了吧。
**********************************
1.发送字符串的话用byte[]就可以啊。用Socket类里面的getOutputStream可以获得一个发送数据的OutputStream类对象。这个类对象有一个函数write(byte[] b) 可以向网络写byte[]。一个字符串可以通过String类中的getBytes() 转化成byte[]。这样总该明白了吧
2.说一下我的思路:开一个端口A发送UDP包(广播给端口B),用于模拟发送,用一个线程(线程1)来跑。开端口B接受局域网内的包,用另外一个线程(线程2)来跑。在发送UDP包的时候,将变量mark置1,发送完置0。线程2如果接受到一个不是从本机发送的包,而且此时mark是1(说明本机和另外一个机器同时在发包),发生了冲突,表示线程1这次发送的包失败。