您的位置:首页 > 理论基础 > 计算机网络

TCP程序设计基础

2016-08-30 16:07 232 查看
TCP网络程序设计是指利用Socket类编写通信程序。利用TCP协议进行通信的两个应用程序是有主次之分的,一个称为服务器程序,另一个称为客户机程序,两者的交互过程



InetAddress类

利用该类可以获取IP地址,主机地址等信息。

方法
返回值

说明
getByName(String  host)

InetAddress

获取与Host相对应的InetAddress对象

getHostAddress()

String

获取InetAddress对象所含的IP地址

getHostName()

String

获取此IP地址的主机名

getLocalHost()

InetAddress

返回本地主机的InetAddress对象

看个例子:

package kop;

import java.net.*;

public   class op {

public static void main(String[] args){
InetAddress ip;
try{
ip=InetAddress.getLocalHost();
String localname=ip.getHostName();
String localip=ip.getHostAddress();
System.out.println("本机名:"+localname);
System.out.println("本机IP地址:"+localip);
}catch(UnknownHostException e){
e.printStackTrace();
}

}

}

结果:

本机名:MS-20150811AZPJ

本机IP地址:192.168.31.125

ServerSocket类

java.net包中的ServerSocket类用于表示服务器套接字,其主要功能是等待来自网络上的"请求",它可通过指定的端口来等待连接的套接字。服务器套接字一次可以与一个套接字连接。如果多台客户机同时提出连接请求,服务器套接字会将请求连接的客户机
4000
存入列队中,然后从中取出一个套接字,与服务器新建的套接字连接起来。若请求连接数大于最大容纳数,则多出的连接请求被拒绝。列队的默认大小是50.

ServerSocket类的构造方法都抛出IOException异常,分别有以下几种形式。

ServerSocket():创建非绑定服务器套接字。

ServerSocket(int  port):创建绑定到特定端口的服务器套接字。

ServerSocket(int  port,int backlog):利用指定的backlog创建服务器套接字并将其绑定到指定的本地端口号。

ServerSocket类的常用方法

方法

返回值

说明

Accept()

Socket

等待客户机的连接。若连接,则创建一套接字

IsBound()

Boolean

判断ServerSocket的绑定状态

GetInetAddress()

InetAddress

返回此服务器套接字的本地地址

IsClosed()

Boolean

返回服务器套接字的关闭状态

Close()

Void

关闭服务器套接字

Bind(SocketAddress endpoint)

Void

将ServverSocket绑定到特定地址(IP地址和端口号)

GetInetAddress()

Int

返回服务器套接字等待的端口号

 

调用ServerSocket类的accept()方法会返回一个和客户端Socket对象相连接的Socket对象,服务器端的Socket对象使用getOutputStream()方法获得的输出流将指向客户端Socket对象使用getInputStream()方法获得的那个输入流;同样,服务器端的Socket对象使用getInputStream()方法获得的输入流将指向客户端Socket对象使用getOutputStream()方法获得的那个输出流。也就是说,当服务器向输出流写入信息时,客户端通过相应的输入流就能读取,反之亦然。
注意:

accept()方法会堵塞线程的继续执行,直到接收到客户的呼叫。如果没有客户呼叫服务器,那么System.out.printIn("连接中")语句将不会执行。语句如果没有客户请求,accept()方法没有发生阻塞,肯定是程序出现了问题。通常是使用了一个还在被其他程序占用的端口号,ServerSocket绑定没有成功。

TCP网络程序

明白了TCP程序工作的过程,就可以编写TCP服务器程序了。在网络编程中如果只要求客户机向服务器发送消息,不要求服务器向客户机发送消息,称为单向通信。客户机套接字和服务器套接字连接成功后,客户机通过输出流发送数据,服务器则通过输入流接收数据。下面是简单的单向通信的实例。

本实例是一个TCP服务器端程序,在getserver()方法中建立服务器套接字,调用getClientMessage()方法获取客户端信息。

package kop;

import java.util.*;

import java.io.*;

import java.net.*;

public  class op{

    private BufferedReader reader;

    private ServerSocket server;

    private Socket socket;

    void getserver(){

        try{

            server=new ServerSocket(898);

            System.out.println("服务器套接字已经创建方法");

            while(true){

                System.out.println("等待客户机的连接");

                socket=server.accept();

                reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));

                getClientMessage();

            }

        }catch(Exception e){

            e.printStackTrace();

        }

    }

    private void getClientMessage(){

        try{

            while(true){

                System.out.println("客户机:"+reader.readLine());

            }

        }catch(Exception e){

            e.printStackTrace();

        }

        try{

            if(reader!=null){

                reader.close();

            }

            if(socket!=null){

                socket.close();

            }

        }catch(IOException e){

            e.printStackTrace();

        }

    }

    public static void main(String[] args){

        op tcp=new op();

        tcp.getserver();

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: