1 先写一个简单版的,只有一个客户端,一个服务端,两者交互一次后自动结束,分析代码存在的问题在代码注释中:
客户端代码: import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; public class Client { /** * @param args */ public static void main(String[] args) { try { // 客户端向服务端发送数据,接受服务端数据时,这两者不应该是顺序的,就是说 客户端可以不听的发送数据给服务端,而不必等 服务端回复数据后客户端在进行发送数据。 Socket client = new Socket("localhost" , 8888); DataOutputStream dos = new DataOutputStream(client.getOutputStream()) ; DataInputStream dis = new DataInputStream(client.getInputStream()) ; dos.writeUTF("zm来了") ; String msg = dis.readUTF() ; System.out.println("服务端返回数据为: " + msg); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 服务端代码: import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class Server { /** * @param args */ public static void main(String[] args) { try { ServerSocket server = new ServerSocket(8888); Socket client = server.accept(); /** * 问题: 每一个client都会和服务端进行连接,每一次连接后这个管道都会有 数据流入和流出,应该将下面的数据流入出封装起来, * 这样在多个客户端和服务端的管道之间,能够将不同管道进行独立并相互发送数据比如 私聊,或者发送给别的客户端数据 */ DataInputStream dis = new DataInputStream(client.getInputStream()) ; DataOutputStream dos = new DataOutputStream(client.getOutputStream()) ; String msg = dis.readUTF(); // 从客户端获取数据 dos.writeUTF("欢迎您: " + msg); } catch (IOException e) { e.printStackTrace(); } } }
可以改进的有:
- 聊天室中,server服务端就是一个中转站
- 聊天室中,client每个客户端彼此独立,每个客户端发送数据,接收数据彼此独立, 按照现有知识,客户端发送数据,接收数据可以封装到Runnable中,使用线程
-
聊天室中,server服务端不停的接收客户端的连接,接收一个就构成一个管道(channel),在这个管道中存在输入和输出流,每个管道之间应该彼此独立,管道之间可以相互独立发送数据(私聊),可以管道向非自己管道的客户端中发送数据(sendothers),按照
现有知识,channel可以用一个runnable来封装
见下图:
第一个图中,发送数据和接收数据应该相互独立
图2, 客户端和服务端的连接channel中的的发送和接收流应该封装到 channel线程中,保证每个客户端和服务端的连接都相互独立
相关推荐
这是一个简单的聊天室,能够实现群聊,私聊和传输文件的功能
一个简单的VC++网络编程聊天室程序,实现多点聊天,代码比较简单 主要用CSocket类实现的聊天室程序
本资料详细介绍了android如何应用socket进行网络编程,详细介绍了android用socket进行聊天室开发,包含服务器端与Android客户端的开发过程介绍,开有详细代码及解释说明,非常适应android网络编程初学者或教师教学...
c#TCPSocket网络编程聊天室,包括客户端和服务器端。对于学习socket编程有很大的帮助。
本文是该系列第一篇,主要讲述了基于套接字(Socket)进行网络编程的基本概念,其中包括TCP协议、套接字、聊天程序的三种开发模式,以及两个基本操作:侦听端口、连接远程服务端;第二篇讲述了一个简单的范例:从...
我上传的 linux下C语言网络编程会话聊天室 程序对应的操作演示文档 对应的代码在我的下一个上传的资源中
利用MFC实现网络编程的聊天室程序.利用SOCKET套接字编写多线程的聊天程序
基于socket、进程间通信机制和共享内存,实现多客户端聊天室功能
聊天室 JAVA 可直接运行 网络编程
各种网络编程,例如,网络聊天室服务器DP协议实现网络通讯等,都是有关网络方面的编程
java网络编程,适合学生课程大作业参考。
在VS2012下用MFC写成的简易网络聊天室程序,包含的知识点有ODBC连接MySql数据库、CSocket类的运用等,对于mfc新手是个不错的学习资源(如果项目无法在VS2012下运行,有可能是因为VS版本不匹配(由于之前是先用VS2013...
2.私聊 3.群聊:在群聊中若收到私密消息,会以消息闪烁形式通知 4.文件传输 5.管理员权限:禁言、...7.心跳检测:当一用户推出聊天室或掉线,其他在线用户会收到该用户下线通知 用户上线时,其他在线用户也会接到通知
这是我网络编程的课设,压缩包包含了源代码,课设报告。我的是vs2019运行。如果不能运行,肯定是你配置没弄好。
网络编程 课程设计 简单 聊天室 C++ 本人自己答辩用的 绝对行滴
c#,socket,私聊,群聊,文件传输
java完整聊天室系统(源码) java完整聊天室系统(源码)
已经实现的网络编程课程设计的网络聊天室 批处理已经做好,直接运行无需编译
python课程设计—网络多人聊天室软件源码。已获通过的高分项目。 设计内容 实现一个可以同时多人在线的网络聊天室软件。 要求如下: 1) 用户通过用户名,密码登录聊天室 2) 聊天室可以显示所有在线用户。(选...