关闭

TCP程序设计基础

178人阅读 评论(0) 收藏 举报
分类:

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



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:49848次
    • 积分:1283
    • 等级:
    • 排名:千里之外
    • 原创:73篇
    • 转载:26篇
    • 译文:0篇
    • 评论:6条
    博客专栏
    最新评论