如何用java实现一个简单网络通信过程

来源:百度知道 编辑:UC知道 时间:2024/06/04 11:38:52
网络中有个aloha协议:是多用户共享单信道。原理比较简单:n个用户开始发送数据,然后在信道上监听,如果不同用户同时发送了数据,则信息产生重叠,即被破坏,这在实际中可以通过监听电平的变化知道,数据被破坏,则产生一个随机时间再重发该数据包,最后计算单位时间内单信道发送的数据包数,即统计该协议的效率。
几个问题:
1.可以用数组发送字符串,但是用哪个函数实现?
2.只能在单机上模拟,不可能通过监听电平变化,怎么知道数据包破坏了?
可以的话能否给个java代码实例,谢了
看你的回答是两台机子互通,但是aloha协议不是用互联的802.3的协议,只能在一台机子上执行
能否告诉我这里面需要用到哪些类,我水平现在比较菜,想不出来,老师说用几个数组一起发送字符串,这东西可能原理能想出一点,但是不知道怎么实现,谢谢了,我把分数都给你

你说的我明白。如果真正使用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这次发送的包失败。