关闭

TCP程序设计基础

270人阅读 评论(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网站的观点或立场

java程序设计基础_陈国君版第五版_第四章习题

java程序设计基础_陈国君版第五版_第四章习题 import java.util.Scanner; public class Main4_1 { public static void main...
  • gaoenbin626
  • gaoenbin626
  • 2016-03-08 13:24
  • 3124

Android程序设计基础

3.1 Android应用程序架构Android程序的入口被称为Main Activity,带有界面的Android应用程序一般需要从Main Activity启动。目录结构Adnroid工程主要包括...
  • yangshangwei
  • yangshangwei
  • 2016-01-06 20:34
  • 2245

推荐一本学Python的好书《Python程序设计(第2版)》

本书最大特点是信息量大、知识点紧凑、案例丰富、实用性强。全书200多个涉及不同行业领域的实用案例,没有多余的文字、程序输出结果或软件安装截图,充分利用宝贵的篇幅来讲解尽可能多的知识,绝对物超所值。本书...
  • dongfuguo
  • dongfuguo
  • 2016-12-24 16:21
  • 3840

java程序设计基础_陈国君版第五版_第六章习题

java程序设计基础_陈国君版第五版_第六章习题class Student{ int ID; String name; String sex; boolean leader; float g...
  • gaoenbin626
  • gaoenbin626
  • 2016-03-09 10:27
  • 3070

java程序设计基础_陈国君版第五版_第五章例题

java程序设计基础_陈国君版第五版_第五章例题 public class Main5_1 { public static void main(String[] args){ int ...
  • gaoenbin626
  • gaoenbin626
  • 2016-03-08 16:25
  • 2597

程序设计基础(Python语言)”编程练习(1)

test1: 整数求和的计算 具体内容: 用户输入一个整数N,计算 (1)从1到N(包含1和N)相加之后的结果; (2)从1到N(包含1和N)之间所有奇数求和的结果; (3)将上述两个结果输出到屏幕上...
  • cnzyhzz
  • cnzyhzz
  • 2015-04-10 19:19
  • 1425

Java语言程序设计(基础篇)原书第十版 课后习题 第五章

import java.util.Scanner; public class Code_Practice_5 { public static void main(String[] args) {...
  • zjjoebloggs
  • zjjoebloggs
  • 2015-10-21 20:27
  • 9928

java程序设计基础_陈国君版第五版_第三章习题

11.编写程序,从键盘上输入一个浮点数,然后将该浮点数的整数部分输出。 import java.util.Scanner;public class Main3_11 { public static ...
  • gaoenbin626
  • gaoenbin626
  • 2016-03-07 15:05
  • 2178

JAVA程序设计:基于TCP协议的聊天程序

一、程序实现的功能: 1、进入客户端界面 2、创建昵称 3、群发信息 4、@私聊 5、下线通知 6、在线人数统计 二、整体架构图: ...
  • mmayanshuo
  • mmayanshuo
  • 2017-11-12 14:35
  • 642

linux TCP程序设计

面向连接的TCP程序设计        基于TCP的程序开发分为服务器端和客户端两部分,常见的核心步骤和流程:        其实按照上面这个流程调用系统API确实可以完全实现应用层程序的开发...
  • ITcookies
  • ITcookies
  • 2015-08-19 19:24
  • 197
    个人资料
    • 访问:71671次
    • 积分:1528
    • 等级:
    • 排名:千里之外
    • 原创:76篇
    • 转载:27篇
    • 译文:0篇
    • 评论:8条
    博客专栏
    最新评论