TCP程序设计基础

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();
    }
}



阅读更多
个人分类: java
想对作者说点什么? 我来说一句

Arduino程序设计基础

2015年11月26日 59.09MB 下载

程序设计基础(吴文虎)

2008年04月06日 1.88MB 下载

VB程序设计基础习题及参考答案

2011年08月02日 6.21MB 下载

Java程序设计基础 课后答案

2009年12月16日 517KB 下载

matlab程序设计基础与应用.pdf

2018年03月08日 22.8MB 下载

没有更多推荐了,返回首页

不良信息举报

TCP程序设计基础

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭