网络编程2

客户端程序设计
服务器端程序需要用到 java.net.Socket类。在服务器/客户端的网络应用程序中,每次TCP连接请求都会由客户端向服务器端发起。客户端程序的建立通常需要以下4个步骤:
1:在客户端应用程序中创建类java.net.Socket的实例对象,与服务器端建立起连接。在创建连接Socket的实例对象时需要制定服务器端的主机名及进行连接的端口号(此端口号一定要与服

务器端的ServerSocket构造实例兑现时所监听的端口号一致)。
2:调用客户端套接字Socket方法getInputStream()和getOutputStream(),获得该套接字所对应的输入流和输出流。
3:通过获得输入流和输出流与服务器端进行数据通信,并处理从服务器端获得的数据及需要向服务器端发送的数据。
4:在数据传输结束以后,关闭输入流和输出流和套接字。
下面编写一个简单的Socket客户端程序示例。程序的功能为连接到兴拉链那个服务器的80端口;并输出了服务器端和客户机的信息。代码如下:

import java.io.*;
import java.net.*;
public class WebClientDemo{
public static void main(String []args)throws IOException{
//创建Socket实例,连接到新浪网的80端口
Socket client=new Socket("www.sina.com.cn",80);
//输出服务端信息
System.out.println("服务器IP是:"+client.getInetAddress());
System.out.println("服务器端口是:"+client.getPort());
//输出客户机信息
System.out.println("客户机IP是:"+client.getLocalAddress());
System.out.println("客户机端口号是:"+client.getLocalPort());
client.close();
}

}

运行结果如下:

服务器IP是:www.sina.com.cn/202.108.33.60
服务器端口是:80
客户机的IP是:/192.168.3.112
客户机端口号是:4208

UDP网络编程
相对TCP而言,UDP的应用并不那么广泛,几个主要的应用层协议如HHTP、FTP和SMTP等使用都是TCP协议。但是随着计算机网络的发展,UDP协议正逐渐显示出它的优点。在信息可以被分割成一

些无关联的信息进行传输的情况下,UDP是一个非常好的选择,特别是在需要很强的实时交互性的场合,如网络游戏、视频会议、股票信息等。下面就介绍如何用java来实现UDP网络编程。
UDP通信概念
UDP通信又称数据包通信。UDP协议采用的基于数据包的网络通信。数据包是一种分组交换的形式,就是把所有要传送的数据分段打成包,再传送出去。它属于无连接型,是把打包成的每个包

(分组)作为一个独立的报文传送出去,所以叫数据包。
UDP通信与通过邮局寄信和取信的过程相似,在寄信之前,不需要与另一个建立专门的连接,只需要知道对方的地址和门牌号(相当于服务地址和端口号),就可以把信寄出去。由于没有专门

建立连接,所以不能保证数据包会顺利达到指定主机,也不能保证数据包包会按照发送的顺序到达指定的主机。
在选择使用协议时,选择UDP必须要谨慎。在网络质量令人不十分满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度

快的优点,所以通常音频、视频和普通数据在传送时使用的UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接受结果产生太大的影响。比如我们聊天用的IQC和QQ就是使用的UDP协议


在java的UDP网络程序中,主要用到两个类:java.net.DatagramSocket和java.net.DatagramPacket类,其中,DatagramSocket类用于发送和接收数据的数据包套接字,而DatagramPacket类是

UDP所传递的数据包,即打包好的数据。DatagramSocket类常见的方法如下:
方法名称 方法说明
send(DatagramPacket p) 发送一个数据包
recieve(DatagramPacket p) 接收一个数据包
disconnect() 断开这个Socket
close() 关闭这个Socket

UDP的特性
虽然UDP是一个不可靠的协议,但它是分发信息的一个理想协议。例如,在屏幕上报告股票市场,在屏幕上显示航空信息等。UDP也用在路由信息协议(Routing Information Protocol,RIP)

中修改路由表。在这些应用场合下,如果有一个消息丢失,在几秒之后另一个新的消息就会代替它。UDP 广泛应用在多媒体应用中,例如,Progressive Networks公司开发的RealAudio

RealAudio audio-ondemand Protocol协议就是运行在UDP之上的协议,大多数因特网电话软件产品也都运行在UDP之上。UDP协议有以下几个特性:
UDP协议是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快的把它放到网络上。在发送端,UDP传送数据的速度仅仅是

受应用程序生成数据的速度。计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态,因此一台服务机可同时向多个用户传输相同的消息。
UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。吞吐来英不受邮寄控制算法的调节,只受应用软件生成数据的速率,传输带宽,源端,终端主机性能的限

制。
UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表(这里面有很多参数)。
UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择适合的报文大小。
UDP的应用
UDP是不可靠的网络协议,那么还有什么使用价值或必要呢?其实不然,在有些情况下,UDP协议可能会变得非常有用。因为UDP具有TCP协议望尘莫及的速度优势。虽然TCP协议中植入了各种安

全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到了严重的影响。反观UDP由于排除了信息可靠传递机制,将 安全和排序等功能交给上层应用来完成,极大减少

了执行时间,使速度得到了保证。
关于UDP协议的最早规范是RFC768,该规范是1980年发布的。尽管发布时间已经很长,但是UDP协议仍然继续在主流应用中发挥着作用,包括视频电话会议系统在内的许多应用都证明了UDP存在

价值。因为相对于可靠性来说,这些应用更加注重实际性能,所以为了获得更好的使用效果(如更高的画面帧刷新速率)往往可以牺牲一定的可靠性(如画面质量)。这就是UDP和TCP两种协

议的权衡之处。根据不同的环境和特点,两种传输协议都将在今后的网络世界中发挥更加重要的作用。
UDP和TCP的区别
UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方

只有在接收到确认消息后才继续传送其他信息,否则将一直等待知道收到确认信息为止。与TCP不同,UDP协议并不提供数据传送的保证机制。如果在从发送方到接受方的传递过程中出现数据

包的丢失,协议本身并不能作出任何检测或提示。因此,通常人们把UDP协议称为不可靠的的传输协议。
相对于TCP协议,UDP协议的另外一个不同之处在于如何接受突发性的多个数据包。不同于TCP,UDP并不能确保数据的发送和接收顺序。例如,一个位于客户端的应用程序向服务器发出了四个

数据包:
D1
D22
D333
D4444
但是UDP有可能按照以下顺序将所接受的数据提交到服务端的应用:
D333
D1
D4444
D22
事实上,UDP协议的这种乱序型基本很少出现,通常只会在网络非常拥挤的情况下才会有可能发生。

时间: 2024-08-09 18:22:28

网络编程2的相关文章

C#网络编程技术FastSocket实战项目演练

一.FastSocket课程介绍 .NET框架虽然微软提供了socket通信的类库,但是还有很多事情要自己处理,比如TCP协议需要处理分包.组包.粘包.维护连接列表等,UDP协议需要处理丢包.乱序,而且对于多连接并发,还要自己处理多线程等等.本期分享课程阿笨给大家带来的是来源于github开源Socket通信中间件:FastSocket,目的就是把大家从繁琐的网络编程技术中彻底地解放和释放出来. 阿笨只想安安静静的学习下网络编程技术Socket后,将学习的成果直接灵活的运用到自己的实际项目中去.

网络编程 -- RPC实现原理 -- RPC -- 迭代版本V1 -- 本地方法调用

网络编程 -- RPC实现原理 -- 目录 啦啦啦 V2--RPC -- 本地方法调用:不通过网络 入门 1. RPCObjectProxy rpcObjectProxy = new RPCObjectProxy(new LocalRPCClient()); : 绑定目标对象 2. IUserService userService = (IUserService) rpcObjectProxy.create(IUserService.class); :返回代理类 3. List<User> u

C#网络程序设计(1)网络编程常识与C#常用特性

    网络程序设计能够帮我们了解联网应用的底层通信原理!     (1)网络编程常识: 1)什么是网络编程 只有主要实现进程(线程)相互通信和基本的网络应用原理性(协议)功能的程序,才能算是真正的网络编程. 2)网络编程的层次 现实中的互联网是按照"TCP/IP分层协议栈"的体系结构构建的,因此程序员必须搞清楚自己要做的是哪个层次上的编程工作. TCP/IP协议体系的实现情况: 其中,网络接口层已经被大多数计算机生产厂家集成在了主板上,也就是经常所说的网卡(NIC).windows操

9. 网络编程:

网络编程: 端口: 物理端口: 逻辑端口:用于标识进程的逻辑地址,不同进程的标识:有效端口:0~65535,其中0~1024系统使用或保留端口. java 中ip对象:InetAddress. import java.net.*; class  IPDemo{ public static void main(String[] args) throws UnknownHostException{ //通过名称(ip字符串or主机名)来获取一个ip对象. InetAddress ip = InetA

物联网网络编程、Web编程综述

本文是基于嵌入式物联网研发工程师的视觉对网络编程和web编程进行阐述.对于专注J2EE后端服务开发的童鞋们来说,这篇文章可能稍显简单.但是网络编程和web编程对于绝大部分嵌入式物联网工程师来说是一块真空领域. 的确,物联网研发应该以团队协作分工的方式进行,所以有嵌入式设备端.网关.web前端.APP.后端开发等专属岗位.作为系统架构师,自然需要掌握各种岗位的关键技术.作为嵌入式工程师,掌握网络编程.web编程,能够极大地拓展自己的视野和架构思维,能够主动地对系统的各种协议和应用场景提出优化的见解

linux网络编程-(socket套接字编程UDP传输)

今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中,如果我们使用TCP传输,会造成传输速度较慢的情况,所以我们在进行文件传输的过程中,最好要使用UDP传输. 在其中,我们需要写两个程序,一个客户端,一个服务端,在一个终端中,先运行服务端,在运行客户端,在服务端和客户端都输入IP地址和端口号,注意服务端和客户端的端口号要相同,然后选择功能,在linux

UNIX网络编程卷1 回射客户程序 TCP客户程序设计范式

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 下面我会介绍同一个使用 TCP 协议的客户端程序的几个不同版本,分别是停等版本.select 加阻塞式 I/O 版本. 非阻塞式 I/O 版本.fork 版本.线程化版本.它们都由同一个 main 函数调用来实现同一个功能,即回射程序客户端. 它从标准输入读入一行文本,写到服务器上,读取服务器对该行的回射,并把回射行写到标准输出上. 其中,非阻塞式 I/O 版本是所有版本中执行速度最快的,

黑马程序员——网络编程篇

------- android培训.java培训.期待与您交流! ---------- 概述   1.网络模型        (1).OSI参考模型        (2).TCP/IP参考模型   2.网络通讯要素         (1).IP地址        (2).端口号         (3).传输协议    3.过程        1,找到对方IP. 2,数据要发送到对方指定的应用程序上.为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识. 为了方便称呼这个数据,叫做端口(逻

网络编程TCP/IP实现客户端与客户端聊天

一.TCP/IP协议 既然是网络编程,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输.这里就要使用到TCP/IP协议. TCP/IP协议(传输控制协议)由网络层的IP协议和传输层的TCP协议组成.IP层负责网络主机的定位,数据传输的路由,由IP地址可以唯一的确定Internet上的一台主机.TCP层负责面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象. 二.TCP与UDP TCP是一种面向连接的保证可靠传输的协议

(一)理解网络编程和套接字

学习<TCP/IP网络编程> 韩 尹圣雨 著 金国哲 译 套接字类似电话 一.服务器端套接字(listening套接字)---接电话套接字 ①调用socket函数---安装电话机 #include <sys/socket.h> int socket(int domain, int type, int protocol); //成功时返回文件描述符,失败时返回-1 ②调用bind函数---分配电话号码 #include <sys/socket.h> int bind(in