一、在进行Socket通信介绍之前,我们需要先了解两个问题
1、我们如何准确的定位网络上一台或多台主机?
2、找到主机后如何进行可靠高效的数据传输?
在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。
而TCP层则提供面向应用的可靠(tcp)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。
目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也 能及时得到服务。
二、计算机网络知识储备:
TCP是Tranfer Control Protocol的 简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建 立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送 或接收操作。
UDP是User Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。
应用:
1,TCP在网络通信上有极强的生命力,例如远程连接(Telnet)和文件传输(FTP)都需要不定长度的数据被可靠地传输。但是可靠的传输是要付出代价的,对数据内容正确性的检验必然占用计算机的处理时间和网络的带宽,因此TCP传输的效率不如UDP高。
2,UDP操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中client/server应用程序。例如视频会议系统,并不要求音频视频数据绝对的正确,只要保证连贯性就可以了,这种情况下显然使用UDP会更合理一些。
三、基于Socket的java网络编程
1,什么是Socket
网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。
但是,Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。
2,Socket通讯的过程
Server端Listen(监听)某个端口是否有连接请求,Client端向Server 端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client 端都可以通过Send,Write等方法与对方通信。
对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:
(1) 创建Socket;
(2) 打开连接到Socket的输入/出流;
(3) 按照一定的协议对Socket进行读/写操作;
(4) 关闭Socket.(在实际应用中,并未使用到显示的close,虽然很多文章都推荐如此,不过在我的程序中,可能因为程序本身比较简单,要求不高,所以并未造成什么影响。)
4,简单的Client/Server程序
见附件
5,支持多客户的client/server程序
前面的Client/Server程序只能实现Server和一个客户的对话。在实际应用 中,往往是在服务器上运行一个永久的程序,它可以接收来自其他多个客户端的请求,提供相应的服务。为了实现在服务器方给多个客户提供服务的功能,需要对上 面的程序进行改造,利用多线程实现多客户机制。服务器总是在指定的端口上监听是否有客户请求,一旦监听到客户请求,服务器就会启动一个专门的服务线程来响 应该客户的请求,而服务器本身在启动完线程之后马上又进入监听状态,等待下一个客户的到来。
相关推荐
Socket网络通信程序设计是Java课程设计中的一个重要主题,旨在让学生深入理解网络通信的基本原理和Java编程技术的应用。在这个项目中,学生需要构建一个基于Socket的网络通信系统,包含服务器端和客户端两部分。 ...
### JAVA学习笔记:Socket通信详解 #### 一、Socket通信概念与原理 Socket通信是Java网络编程中的核心概念,它提供了在不同计算机之间进行数据交换的能力。Socket可以被视为两个程序间进行通信的端点,一个Socket...
**小结**: 完成这样一个聊天室项目,不仅需要掌握Java的基础语法,还需要熟悉网络编程和多线程技术。通过实际操作,可以提升对Java网络通信的理解,同时也能锻炼软件设计和界面开发的能力。 参考文献中提到的书籍...
为了全面理解Java基础知识,本小结将按照给定的文件名,逐一解析关键知识点。 1. **Java基础知识** 这一部分通常包括Java语言的基础语法,如变量、数据类型、运算符、流程控制(if语句、switch、for、while循环等...
- **Selector小结**:总结Selector的使用技巧。 - **数据报(UDP)信道**:介绍如何使用UDP Channel进行数据通信。 #### 第6章 深入剖析 这一章进一步探讨了套接字编程的一些高级主题,包括缓冲机制、性能优化、...
- **Selector小结**:总结Selector的使用要点。 - **数据报(UDP)信道**:针对UDP协议的Channel操作。 #### 9. 深入剖析 - **缓冲和TCP**:深入理解TCP协议中的缓冲机制。 - **死锁风险**:在网络编程中避免死锁...
- **Selector小结** Selector的工作原理总结。 - **数据报(UDP)信道** UDP信道的使用方法。 #### 第6章 深入剖析 - **缓冲和TCP** 缓冲区的管理及其对TCP性能的影响。 - **死锁风险** 并发环境下死锁...
### 小结 本次课程设计锻炼了学生的Java编程能力,特别是网络通信和GUI设计技术。通过实际项目的开发,学生能够深入理解C/S架构的工作原理,掌握Java网络编程的基本技巧,以及如何构建一个基本的实时通信系统。 在...
Java中可以使用Socket编程来创建服务器端和客户端的通信通道。服务器端负责接收并广播消息,而客户端则连接到服务器,发送和接收聊天内容。为了实现群聊,我们需要处理多个客户端的并发连接,这需要用到多线程技术,...
#### 小结 - 使用`String host`和`int port`参数构建`Socket`对象是最常见的连接方式。 - 通过`InetAddress`对象构建`Socket`对象可以避免因主机名解析失败而导致的异常。 - 指定流类型的方式虽然被标记为废弃,但...
小结 本项目实现了基于Java网络通信技术的C/S模式聊天室设计。通过合理的设计和编码,不仅实现了基本的聊天功能,还扩展了文件传输等功能,为用户提供了一个实用的聊天工具。此外,项目的实施过程中也锻炼了开发者...
这个实验报告主要涉及了两个关键概念:I/O操作和线程管理,同时包含了一个基本的聊天室代码实现,这为我们提供了理解Java如何处理网络通信的实际示例。 1. **Java I/O操作**:在Java中,I/O(输入/输出)操作用于...
- **Selector小结**:总结使用`Selector`的关键步骤和最佳实践。 - **数据报(UDP)信道**:描述如何使用`DatagramChannel`进行UDP通信。 #### 第6章 深入剖析 - **缓冲和TCP**:深入探讨TCP协议中的缓冲机制...
3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...
#### 四、小结 本文详细介绍了如何使用Java创建一个基本的TCP服务器,并且探讨了如何将其与Java Swing界面结合,实现多用户连接的功能。这对于开发实时聊天应用、游戏服务器等场景非常有用。需要注意的是,在实际...
1.9 本章小结 22 本章练习 22 第2章 理解面向对象 23 2.1 面向对象 24 2.1.1 结构化程序设计简介 24 2.1.2 程序的三种基本结构 25 2.1.3 面向对象程序设计简介 27 2.1.4 面向对象的基本特征 28 2.2 UML...
6. **网络编程**:Java的Socket编程接口使得开发者能够创建网络客户端和服务端,实现数据的收发。在本项目中,可能用于实现远程数据交换或者系统间的通信。 7. **Swing界面与事件驱动模型**:Swing是Java的图形用户...