现在的位置: 首页 > 综合 > 正文

java TCP协议程序设计

2017年08月15日 ⁄ 综合 ⁄ 共 3335字 ⁄ 字号 评论关闭

网络编程基本概念:

网络通信要素

地址:与网络上哪台计算机通信

端口:与计算机上的哪个网络应用程序通信

协议:采用什么规则进行通信


JAVA的网络编程方法:

Java.net的包提供相应的类与方法

地址:获得要通信的网络计算机地址

代表IP地址的InetAddress类

端口:获得要通信网络应用程序

0-65535的端口号,1024以下的保留

协议:采用某种确认的通信规则

TCP:ServerSocket/Scoket

UDP:DatagramSocket

IP地址:

IP网络中每台主机都必须有一个惟一的IP地址;

IP地址是一个逻辑地址;

因特网上的IP地址具有全球唯一性;

32位,4个字节,常用点分十进制的格式表示,例如:192.168.0.16

Java.net包中提供一个InetAddress类表示IP地址

InetAddress对象:

用途:获得要通信的对象的IP地址.

说明: InetAddress类提供了域名解析和反解析功能

InetAddress类没有构造函数,但拥有一 些能够返回 InetAddress对象的static的方法

getLocalHost():返回本地主机的IP地址

getByName(String host):返回host主机的IP地址

getByAddress(byte[] addr):返回addr主机的IP地址, addr数组元素的值是未经处理的4组数字(-127~128).

以上都是静态方法,返回值为InetAddress对象,且都要抛出异常throws UnknownHostException

import java.net.*;
public class IntAdd01
 {
     public static void main(String[] args) throws UnknownHostException
    {
        InetAddress IP1=InetAddress.getLocalHost();
                  System.out.println("IP1==>"+IP1);
                  System.out.println("==============================");
        InetAddress IP2=InetAddress.getByName("www.zwu.edu.cn");
                  System.out.println("IP2==>"+IP2);                         
                  System.out.println("==============================");
        InetAddress IP3=InetAddress.getByName("10.60.60.41");
                  System.out.println("IP3==>"+IP3);  
                  System.out.println("==============================");
        InetAddress IP4=InetAddress.getByAddress  (new 
                                                                        byte[]{(byte)216,(byte)239,(byte)53,(byte)101});
                   System.out.println("IP4==>"+IP4); 
                   System.out.println("==============================");
          InetAddress[] IPGroup=InetAddress.getAllByName("www.yahoo.com");
                   System.out.println("输出IPGroup:");
          for(int i=0;i<IPGroup.length;i++)
         {
                   System.out.println(IPGroup[i]);
           }
    }
}


端口:

端口用一个整数型标识符来表示,即端口号。端口号跟协议相关,TCP/IP传输层的两个协议TCP和UDP是完全独立的

两个软件模块,因此各自的端口号也相互独立,端口通常称为协议端口(protocol port) ,简称端口。

端口使用一个16位的数字来表示,它的范围是0~65535,1024以下的端口号保留给预定义的服务。例如:http使用80

端口。

TCP协议的实现方法:

协议:为进行网络中的数据交换(通信)而建立的规则、标准或约定。(=语义+语法+规则) 

TCP/IP已成为Internet上通信的工业标准。

TCP/IP模型包括4个层次:

应用层:SMTP\POP3\FTP\Telnet\Http

传输层: TCP\UDP

网络层:IP\ICMP\IGMP

网络接口

出了一种应用程序访问通信协议的操作系统调用socket(套接字)。socket的出现,使程序员可以很方便地访问TCP/IP,

从而开发各种网络应用的程序。

随着Unix的应用推广,套接字在编写网络软件中得到了极大的普及。后来,套接字又被引进了Windows 等操作系统

中。Java语言也引入了套接被引进了Windows 等操作系统中。Java语言也引入了套接字编程模型。

TCP协议Socket:

Socket类

ServerSocket类


TCP协议是一个面向连接的可靠性传输协议,在发送数据之前,先要发出连接请求,当对方监听到有请求来到时就建立连

接,然后双方就可以收发消息,发送完信息后,双方就断开连接.

发起连接请求的一方:客户端(client)

接受连接请求的一方:服务器端(Server)

客户端的Socket类构造方法:

Socket():

Socket(InetAddress add,int port):

Socket(String host, int port):

Socket(InetAddress add,int port,InetAddress Localadd,int localport):

Socket(String host, int port ,InetAddress Localadd,int localport):

客户端的Socket类常用方法:

IntAddress getInetAddress():

IntAddress getLocalAddress():

Int getPort():

Int getLocalPort():

InputStream getInputStream() throws IOException:

Outputstream getOutputStream() throws IOException :

Close() throws IOException :

String toString():

isClose():

IsConnected():

服务器端的ServerSocket类构造方法:

ServerSocket():

ServerSocket(int port):

ServerSocket(int port,int backlog)

backlog参数指定进入连接指示的最大队列长度,默认值为50,当队列已满,若有新的连接请求到来,则会拒绝.

ServerSocket(int port,int backlog,InetAddress bindAdd):

服务器端的ServerSocket类常用方法:

Socket accept();

IntAddress getInetAddress():

Int getLocalPort():

Close() throws IOException :

String toString():

isClose():

IsBound():


客户端程序编写:

①调用Socket()创建一个流套接字,并连接到服务器端;

②调用Socket类的getOutputStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接收。

③最后关闭通信套接字。

服务器程序编写:

①调用ServerSocket(int port)创建一个服务器端套接字,并绑定到指定端口上;

②调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字。

③调用Socket类的getOutputStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接收。

④最后关闭通信套接字。


服务器程序的多线程实现:

服务器往往是对多个客户端提供服务,传统的单线程的实现方式使得服务器只能响应一个客户端的请求.所以针对于服务

器,一般是以多线程的方式来实现.

【上篇】
【下篇】

抱歉!评论已关闭.