资源浪费问题可以留给jvm的垃圾处理机制解决就可以了吧。你做的那个if判断没什么实际意义吧。
线程类的第54行,判断语句后面怎么能加分号呢
建议先看多线程哦,但是如果不学多线程的话,我感觉影响不是很大
ServerThread类中 //获取输入流
import org.omg.CORBA.portable.InputStream;你要导入IO流的包;
客户端中,Socket socket=new Socket(InetAddress.getLocalHost(),7001);将InetAdress.getLocalHost()直接写成"IP"这种就行了,IP是你自己的IP地址。
另外是先启动服务端,如果服务端没有启动的话,启动客户端会报错
br.close();
is.close();
pw.close();
os.close();
socket.close(); 如果多个流连接在一起,直接关闭最终的流就可以了;br.close();os.close();socket.close();
把两台电脑的防火墙都关掉就可以了
建议去看看多线程方面的知识,这个输出的顺序和写在外面的代码顺序是没有关系的,调用了start方法只是表明有一个新的线程开始工作了,并不代表原来的线程会暂停工作,多次运行输出的顺序有时候可能是不一样的。
学过多线程你就知道咋回事了。
在路由器上做端口映射
不会,jvm回自动管理
代码啊
ip和端口 是服务器端的,也就是服务器一直在侦听本地的指定的端口,等待客户端的连接请求,客户端访问的是服务器端的地址。服务器没有变,只是多客户端访问,所以IP和端口号不变
老师是把步骤3到步骤5之间的部分代码剪切到ServerThread类下面的,可不是复制过去的哦。
eclipse 中是 alt+shift+z,在选中后右键的包围方式那里
https://www.imooc.com/learn/123
while的时候每次执行到serversocket.accept()方法的时候会阻塞在那里,不会一直循环
127.0.0.1这个值是固定的,就是用来表示本机的,和你机器的实际IP地址无关
Alt + shift +Z
点笔记那边,,有截图按钮
你可以在count++前面加个sleep方法,就可以打印你想要的了
因为等于null就代表没有连接到客户端啊,关闭还有什么意义
每台电脑本地的ip地址都是127.0.0.1,就是那个可以用localhost代替的ip
没有上下文的代码只能猜测,强答一发。socket.close()这个方法调用是需要具体的对象的如Socket socket = new Socket(8888);如果没有对象只有引用,那么就会初始化为null,在null这个无意义的数据上是无法产生有意义的结果的。有点偏题。。。。socket如果不为空,那么一定有一个Socket对象被打开,当使用完后资源没有close就会占用资源,可能造成别的程序无法访问资源。。。但是这个if是感觉没必要的,在null上调用close是没有意义的,个人见解,欢迎指教
因为网络通信过程中客户端的主机名是不会带到服务器端的。。第二,你没学过多线程吗,不知道主线程和调用的线程是交替进行的吗,都是独立进行的。
你这个属于操作错误吧
你的意思是一个服务器发多条信息还是多个服务器
效率问题,不建立的话,就必须得上一个任务完成才会开始下一个任务,如果一个任务出了问题,就会一直停留导致不响应,耽误后面的任务。建立一个处理类,就使你响应速度加快。还有优点就不用我说了吧
一. 检查count=0
二.检查输出adress的代码位置
代表该线程正在运行状态,点击后会关闭该线程。
一看就没学多线程··,调用start方法就是调用了run方法