虽然Java不适合桌面应用的开发 但是肯定还是有办法哒
本回答针对已经会Java Awt/Swing或其他框架 并且会Java IO/NIO技术的童鞋~
我们不妨先设计一个思路: 客户端图形界面最简单的使用Swing技术 通讯使用TCP连接 (Java IO或者Java NIO)
服务端先显示一个窗口 根据输入的端口号来开一个ServerSocket 绑定到这个端口
接着我们在服务端上无限循环地接收客户端的连接请求(accept方法)
每当我们接到一个连接请求的时候 我们给该客户端建立一个新的 我们要和客户端达成一个协议 就是连接后 由客户端发出服务端接收的第一次信息 客户端告知自己的用户名(当然你也可以每次客户端发送消息的时候都用一个分隔符将自己的用户名和消息使用分隔符分开来直接解析) 获得用户名之后将该用户名和套接字还有其他的连接都保存起来 保存到一个集合 在这个新的线程中 不断地接收客户端发来的消息 每当读取到一条消息后 我们向集合内的所有连接发送一个消息 就比如xxx发送了xxx消息
最后 为了避免僵尸进程 在客户端关闭套接字或者意外断开连接的时候 我们要将其关闭
我们通过SocketChannel或InputStream读取时 如果对面没有发来消息 正常情况下该read请求是会阻塞线程的 所以记得!要给读取的工作新开一个线程! 如果没有阻塞且如果返回值是-1 (如果是BufferedReader会返回null) 则代表客户端已将该连接关闭 此时我们也应当将连接关闭 并将其从集合中移除 将该连接的对应线程做中断处理 如果是NIO就很简单 它会直接帮你抛出异常让你做下一步操作 但是如果是旧IO 那就需要自己做判断咯
如果说我们读取信息时报出了IOException异常 就代表连接意外终止了 此时也应该将连接关闭并终止对应线程
客户端方面 和服务端一样 我们先弹出一个窗口 需要先弹窗 根据输入的IP地址和端口进行连接到对应的服务器
若连接成功 就可以新开一个窗口 放进一个滚动文本框和一个输入框 此时我们应该想服务器发送自己的名字 然后新开一个线程或者直接在主线程上跑 无限循环地读取服务器发来的消息 并将其打印在这个滚动文本框中 监听我们输入框的事件中 日期就用SimpleDateFormat来实现吧 当按下Enter或单击了发送按钮 我们就可以将输入的的信息发送给服务端并清空输入框
同样的 客户端也记得要做数据流关闭处理 和上方服务端差不多 但是还要多一个步骤 监听窗口关闭的事件 在关闭的时候关闭IO流
注意:这肯定不是最优办法 但是应该是适合新人的方法
一般的电脑是无法直接IP端口连接的 因为我们的要求是局域网 想要在广域网连接需要端口映射技术
在读取完发来的信息或发送完信息后不要将流关闭 就保持开着就行 不然的话整个连接都会被关闭...
本人第一次写回答 语言表达能力有限 文字很多东西都讲不清楚 挺含糊的 如果有不懂欢迎来问我哦
如果想要实现问题中的注册登录也只需要简单的发包和存储数据即可 密码如果不对直接返回密码错误的消息 然后把连接关闭就行啦