`

网络编程 聊天室

 
阅读更多

 

 

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线程中,保证每个客户端和服务端的连接都相互独立

 

  • 大小: 104.9 KB
  • 大小: 64.8 KB
分享到:
评论

相关推荐

    VC++网络编程聊天室程序源代码

    《VC++网络编程聊天室程序源代码解析》 在计算机科学领域,网络编程是一项至关重要的技术,它使得不同计算机间的通信成为可能。本文将详细解析一个基于VC++的网络编程聊天室程序,该程序实现了多点聊天功能,是学习...

    网络编程聊天室

    这是一个简单的聊天室,能够实现群聊,私聊和传输文件的功能

    java网络编程聊天室

    在这个"java网络编程聊天室"项目中,我们可以探索如何使用Java实现一个基本的聊天应用,这对于学生的课程大作业来说是一个很好的实践课题。 首先,我们需要了解Java中的网络编程基础。Java提供了一系列的API来处理...

    c#TCPSocket网络编程聊天室

    本项目“c#TCPSocket网络编程聊天室”提供了一个实用的学习平台,通过实现一个简单的聊天室,帮助开发者深入理解TCP套接字的工作原理及其在C#中的应用。 TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流...

    Android网络编程-聊天室开发

    ### Android网络编程——聊天室开发 #### 一、概述 Android聊天室项目是基于Socket网络编程的一个典型应用案例。通过本项目的开发,开发者可以深入了解如何利用Android设备与服务器端进行通信,实现多人在线聊天的...

    c#网络编程聊天室

     本文是该系列第一篇,主要讲述了基于套接字(Socket)进行网络编程的基本概念,其中包括TCP协议、套接字、聊天程序的三种开发模式,以及两个基本操作:侦听端口、连接远程服务端;第二篇讲述了一个简单的范例:从...

    网络编程聊天室--操作演示文档

    在本文中,我们将深入探讨如何在Linux环境下使用C语言实现一个聊天室程序,这是一个非常实用的网络编程项目,可以帮助我们理解TCP/IP通信、多线程处理以及并发控制等核心概念。我们将按照描述中的步骤,逐步解析这个...

    网络编程实现聊天室

    本项目“网络编程实现聊天室”聚焦于使用Microsoft Foundation Classes (MFC)库来创建一个基于SOCKET套接字的多线程聊天应用程序。MFC是微软提供的C++类库,用于简化Windows应用程序的开发,而SOCKET则是进行网络...

    Socket 网络编程 实现聊天室

    总之,这个基于Socket的聊天室示例展示了如何结合使用基本的网络编程和进程间通信技术来构建一个简单的多人交流平台。虽然这个实现可能不包含高级特性,如错误处理、安全措施或优化的性能,但它为学习网络编程和并发...

    网络编程实例(简单网络聊天室)

    《网络编程实例:简单网络聊天室》 网络编程是计算机科学中的一个重要领域,它涉及到通过网络进行数据交换和通信的技术。本实例将深入探讨网络编程的基础,并通过构建一个简单的网络聊天室来展示其核心概念。这个...

    c#网络编程-聊天室

    在本文中,我们将深入探讨C#网络编程,特别是在构建一个聊天室应用的上下文中。C#,作为一种强大的面向对象的编程语言,广泛用于开发桌面、Web以及移动应用程序,其内置的Socket类使得网络通信变得简单易行。我们将...

    网络编程c++聊天室.zip

    【网络编程C++聊天室】是一个使用C++语言实现的网络聊天室项目,它展示了如何在客户端和服务器之间建立通信,实现数据的实时传输。在这个课设中,开发者使用了Visual Studio 2019作为集成开发环境。如果你无法运行这...

    聊天室(JAVA网络编程)

    在本文中,我们将深入探讨如何使用Java进行网络编程来创建一个聊天室应用。Java网络编程是构建分布式系统和网络服务的基础,它允许程序通过互联网进行通信。在这个项目中,我们将利用Java的Socket编程来实现客户端与...

    VS2012 MFC小程序 简易网络聊天室

    在VS2012下用MFC写成的简易网络聊天室程序,包含的知识点有ODBC连接MySql数据库、CSocket类的运用等,对于mfc新手是个不错的学习资源(如果项目无法在VS2012下运行,有可能是因为VS版本不匹配(由于之前是先用VS2013...

    聊天室(C语言)- 基于文件编程、网络通信、数据库实现

    2.私聊 3.群聊:在群聊中若收到私密消息,会以消息闪烁形式通知 4.文件传输 5.管理员权限:禁言、...7.心跳检测:当一用户推出聊天室或掉线,其他在线用户会收到该用户下线通知 用户上线时,其他在线用户也会接到通知

    网络编程课程设计 简单聊天室 C++

    在本课程设计中,我们将探讨如何使用C++进行网络编程,构建一个简单的聊天室应用。网络编程是计算机科学中的一个重要领域,它涉及到通过网络在不同设备间交换数据和信息。C++是一种强大的、通用的编程语言,具有面向...

    linux网络编程(TCP多人在线聊天室)

    Linux网络编程是一个涵盖...以上就是关于“Linux网络编程(TCP多人在线聊天室)”项目的主要知识点。通过这个项目,你可以深入理解TCP协议的工作原理,掌握如何使用socket进行网络编程,以及如何处理并发连接和数据交换。

    java完整聊天室系统(源码)

    java完整聊天室系统(源码) java完整聊天室系统(源码)

    网络编程课程设计(网络聊天室)

    网络编程课程设计通常涵盖了许多关键概念和技术,这里我们主要关注的是一个实现的网络聊天室项目。这个项目已经完成,批处理文件也准备就绪,意味着用户可以直接运行而无需进行额外的编译步骤。 首先,我们要了解的...

    Java实现带有GUI界面的聊天室,双方通过socket通信

    在这个项目中,我们将讨论如何使用Java实现一个带有图形用户界面(GUI)的聊天室,其中双方通过socket进行通信。Socket是网络编程中的基本组件,它允许两个或多个应用程序通过网络交换数据。 首先,我们需要了解...

Global site tag (gtag.js) - Google Analytics