Java语言Socket接口用法详解
Socket接口用法详解
在Java中,基于TCP协议实现网络通信的类有两个,在客户端的Socket类和在服务器端的ServerSocket类,ServerSocket类的功能是建立一个Server,并通过accept()方法随时监听客户端的连接请求。
扩展:
ServerSocket中常用的构造函数及方法
构造函数:ServerSocket(int port) 这是一个构造方法,用于在当前的服务器默认的IP地址上监听一个指定的端口,即在指定的IP和端口创建一个ServerSocket对象
方法:
Socket accept() 产生阻塞,监听指定的端口,直至有客户端发来连接请求
void close() 关闭当前ServerSocket
InetAddress getInetAddress() 返回ServerSocket监听的,本机的IP地址
int getLocalPort() 返回ServerSocket监听的,本机的IP地址上指定的端口号
int getSoTimeout();void setSoTimeout(int timeout) 设置连接过程中没有得到相应的等待期限时间(TimeOut)
String toString() 以字符串的方式返回ServerSocket监听的,本机的IP地址及其端口号
Socket类中常用的构造函数和方法
构造函数:Socket(InetAddress address,int port) 用于创建一个链接,向指定的IP地址上指定的端口的服务器端程序发送连接请求
Socket(String host,int port) 同上,但该方法允许通过主机名字符串向服务器发送连接请求
方法:
void close()关闭当前的Socket 连接
InetAddress getInetAddress() 返回Socket建立了连接的服务器的IP地址
InputStream getInputStream() 返回当前Socket的输入流
OutputStream getOutStream() 返回当前Socket的输出流
InetAddress getLocalAddress() 返回和Socket进行连接的本地的IP地址
int getLocalPort() 返回和Socket进行连接的本地的端口号
int getPort() 返回和Socket建立了连接的服务器的端口号
int getSoTimeOut();void setSoTimeOut(int timeout) 设置连接过程中没有得到相应的等待期限时间
String toString () 以字符串的方式返回Socket的属性信息
Socket类的构造方法包括以下几种:
public Socket(String host,int port)
public Socket(InetAddress address,int port)
public Socket(String host,int port,InetAddress localAddr,int localPort)
public Socket(InetAddress host,int port, InetAddress,localAddr,int localPort)
在JDK1.1以前,Socket类可同时用于TCP/UDP通信:
public Socket(String host,int port,Boolean stream)
public Socket(InetAddress host,int port, Boolean stream)
Socket类的输入/输出流管理包括以下方法:
public InputStream getInputStream()
public void shutdowmInput()
public OutputStream get OutputStream ()
public void shutdowmOutput()
以上这些方法都将抛出IOException异常,程序中需要捕获并处理。
关闭Socket的方法为:
public void close() throws IOException
设置/获取Socket数据的方法为:
public InetAddress getInetAddress()
public int getPort()
public void setSoTimeout(int timeout)
这些方法都将抛出SocketException异常,程序中需要捕获并处理。
ServerSocket类的构造方法包括以下几种:
public ServerSocket (intPort)
public ServerSocket (int Port,int backlog):支持指定数目的连接
public ServerSocket (intPort,int backlog,InetAddress bindAddr)
这些方法都将抛出IOException异常,程序中需要捕获并处理。
public Socket accept():等待客户端的连接
public void close():关闭Socket
设置/获取Socket数据的方法包括:
public InetAddress get InetAddress ()
public int getLocalPort()
public void setSoTimeout(int timeout)
这些方法都将抛出SocketException异常,程序中需要捕获并处理。
Socket的基本概念
1.建立连接
当需要建立网络连接时,必须有一台机器运行一个程序,随时等候连接,而另一端的程序这对其发出连接请求。这一点同电话系统类似——必须有一方拨打电话,而另一方必须等候电话连通。建立连接的过程为:
(1)现在服务器端生成一个ServerSocket实例对象,随时监听客户端的连接请求。
(2)当客户端需要连接时,相应地要生成一个Socket实例对象,并发出连接请求,其中host参数指明该主机名,port#参数指明该主机端口号。
(3)服务器端通过accept()方法接收到客户端的请求后,开辟一个接口与之进行连接,并生成所需的I/O数据流。
(4)客户端和服务器端的通信都是通过一对InputStream和OutputStream进行的,通信结束后,两端分别关闭对应的Socket接口。
2.连接地址
打电话时,呼叫方必须事先知道所需拨打的号码,而程序建立网络连接时,也同样需要知道地址或主机名称。另外,网络连接还需要一个端口号(可以将其当作电话的分机号),连接到正确的主机之后,需要对该连接确认特定口令。某些情况下,还需要使用一个扩展号码与网络计费系统相连,于是相应地要有一个特定端口号用于连接计费程序。
3.端口号
在TCP/IP系统中,端口号由16位二进制整数组成,即在0-65535之间。实际应用中,前1024个端口号已经预先定义为一些特定服务,因此一般不能使用,除非想同这些服务器进行连接(如Telnet,SMTP,mail,ftp等)。在两个程序连接之前,彼此之间必须达成一致,即由客户端负责初始化连接,而服务器随时等候请求。只有客户端和服务器端指定端口号一致时连接才会建立。如果系统中两个程序所用端口号不一致,这连接无法建立。
4.网络连接模式
在Java中,TCP/IP接口的连接是由java.net包中的类实现的。如图表示的是Socket连接过程中客户端和服务器端的工作原理。
每个server端都拥有一个端口号,一台机器上如果运行多个服务,这可能对应多个端口号。通信结束后,两端分别关闭对应的Socket接口,而不影响其他的端口。
Socket通信的基本步骤
使用Socket方式进行网络通信的程序基本结构都是类似的,无论一个Socket通信程序的功能多么齐全、程序多么复杂,其基本结构都是一样的。客户端与服务器端进行通信的过程都包括以下四个基本步骤:
(1)在服务器端指定一个用来等待连接的端口号,在客户端规定一个主机和端口号,从而在客户端和服务器端创建Socket/ServerSocket实例。
(2)打开连接到Socket的输入输出流。
(3)利用输入输出流,按照一定的协议对Socket进行读写操作。
(4)关闭输入输出流和Socket
通常,程序员的主要工作时针对所要完成的功能砸器第(3)步进行编程,第(1)、(2)、(4)步对所有的通信程序来说几乎都是一样的。
Socker通信的程序设计
1.服务器端程序
TCP/IP服务器端应用程序是通过Java语言中提供的ServerSocket和Socket这两个有关网络的类来实现的。而ServerSocket类除了建立一个Server之外,还通过accept()方法提供了随时监听客户端连接请求的功能,它的构造方法有以下两种。
ServerSocket(int port)
ServerSocket(int port,int backlog)
其中port是指连接中对方的端口号,backlog则表示服务器端所能支持的最大连接数。下面的程序用来监听客户端应用程序建立连接的请求,并在连接建立后向客户端发送信息。
/**
* 功能:这是服务器端程序,用来监听客户端应用程序建立连接的请求,并在连接建立后向客户端发送信息
*/
package com.xushouwei;
//引入相应的包
import java.net.*;
import java.io.*;
public class TServer
{
public static void main(String[] args)
{
//定义ServerSocket类
ServerSocket s=null;
//定义Socket类
Socket s1;
//定义发送字符串
String sendString="你好!我是徐守威...";
//得到发送字符串的长度
int s1lenth=sendString.length();
//定义OutputStream类
OutputStream s1out;
//定义DataOutputStream类
DataOutputStream dos;
//通过1314端口建立连接
try
{
//创建ServerSocket并把传入端口号
s=new ServerSocket(1314);
} catch (Exception e)
{
e.printStackTrace();
}
//循环运行监听程序,以监视连接请求
while(true)
{
try
{
//监听端口请求,等待连接
s1=s.accept();
//得到与socket相连接的数据流对象
s1out=s1.getOutputStream();
dos=new DataOutputStream(s1out);
//发送字符串
dos.writeUTF(sendString);
//关闭数据流(但不是关闭Socket连接)
dos.close();
s1out.close();
s1.close();
} catch (Exception e)
{
e.printStackTrace();
}
}
}
}
2.客户端程序
TCP/IP服务器端应用程序是通过Java语言中提供的Socket类来实现的。同样,Socket类提供了包括建立网络连接在内的许多功能,它的构造方法有以下几种:
Socket(InetAddress address,int port)
Socket(InetAddress address,int port,Boolean stream)
Socket(String host,int port)
Socket(String host,int port, InetAddress localAddr,int localPort)
其中,address、host和port分别指连接另一方的IP地址、主机名称和端口号,stream这表示该Socket是否是支持流的Socket,localAddr和localPort是本机的地址和端口号。下面程序用来与前面的服务器端程序建立连接,并将服务器端送来的信息显示在标准输出上。
/**
* 功能:这是客户端程序,用来与前面的服务器端程序建立连接,并将服务器端送来的信息显示在标准输出上
*/
package com.xushouwei;
//引入相应的包
import java.net.*;
import java.io.*;
public class TClint
{
public static void main(String[] args)
{
//定义Socket类
Socket s1;
//定义InputStream类
InputStream s1In;
//定义DataInputStream类
DataInputStream dis;
try
{
//在端口1314打开连接
s1=new Socket("127.0.0.1",1314);
//获得socket端口的输入句柄,并从中读取数据
s1In=s1.getInputStream();
dis=new DataInputStream(s1In);
String st=new String(dis.readUTF());
System.out.println(st);
//操作结束,关闭数据流及socket连接
dis.close();
s1In.close();
s1.close();
} catch (Exception e)
{
e.printStackTrace();
}
}
}
转载于:https://www.cnblogs.com/Jasxu/p/Java-Socket.html
Java语言Socket接口用法详解相关推荐
- eval 函数 java_[Java教程]eval()函数用法详解
[Java教程]eval()函数用法详解 0 2015-12-14 11:00:26 eval()函数用法详解: 此函数可能使用的频率并不是太高,但是在某些情况下具有很大的作用,下面就介绍一下eval ...
- C语言return的用法详解,C语言函数返回值详解。 (本次转载仅供学习,感谢原创!!转发自C语言中文网,如有侵权请私信本人删除)
C语言return的用法详解,C语言函数返回值详解 转载:http://c.biancheng.net/view/1855.html 函数的返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这 ...
- c语言for表达式1的作用,C语言for语句用法详解
C语言for语句用法详解 C语言是一门高级计算机编程语言,设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.下面小编给大家介绍C语言f ...
- php中socket的使用,php中socket的用法详解,phpsocket详解_PHP教程
php中socket的用法详解,phpsocket详解 本文实例详细讲述了php中socket的用法,分享给大家供大家参考.具体用法如下: 一.开启socket phpinfo();查看是否开启了so ...
- 【C语言for语句用法详解】
** C语言for语句用法详解 说明 for语句用于重复执行一段语句块.通常会使用一个增量计数器递增和终止循环.for语句对于任何需要重复的操作是非常有用的. 结构 for(表达式1; 表达式2; 表 ...
- java中String的用法详解
在这里先分别对String.StringBuffer.StringBuilder进行解析,在比较三者异同 String String类:代表字符串.Java程序中所有的字符串字面值(如"fd ...
- c语言 switch case 字符串,c语言switch case用法详解
c语言switchcase用法详解 switch是"开关"的意思,它也是一种"选择"语句,但它的用法非常简单.switch是多分支选择语句.说得通俗点,多分支就 ...
- java中synchronized的用法详解
记下来,很重要. Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchron ...
- java语言之super关键字详解
文章目录 前言 一.super介绍 二.super的语法 三.super内存图 四.super小结 前言 你第一次遇到super关键字是什么时候呢?是不是使用IDEA或者eclipse快捷键生成类构造 ...
最新文章
- 建立双链表(尾插法)
- 三维动画属于计算机专业吗,三维动画设计专业属于文科还是理科
- java.awt.Graphics2D绘制流程图基本元素
- 直男对于产品经理的思考
- 【NBIoT无线模块DTU数传电台】串口服务器RS232/RS485端口工业路由信号传输
- Redis 支持的数据类型
- 锂电池接线方法图_老电工整理的41条电路接线方法,每一条都值得收藏
- mysql function_MySQL基础函数——数学函数详解
- 一维装箱问题 java_c语言来实现贪心算法之装箱问题
- 对话框获取目录、文件路径
- 全新开始fighting
- 计算机应用技术与英语相关性,浅析计算机应用的技术专业的计算机专业英语的教学改进.doc...
- Visio Professional详细教程(一)
- B站粉丝数监控(Python实现)
- 如何实现电脑快速开机
- 期货日内交易如何判断方向
- 【kubernetes】k8s的job和cronjob详细说明【job、cronjob(cj)、descheduler(pod均衡)】
- tink.js # pixi辅助插件 — 中文翻译教程
- 性别计算机英语怎么说,性别教育用英语怎么说?
- 车路协同、车联网、智慧交通、智能网联车、自动驾驶、无人驾驶、高精度地图
热门文章
- Tesla P4测试
- 给定一个年份,判断是不是闰年
- 深度学习的实用层面 —— 1.12 梯度的数值逼近
- LeetCode自我总结(对链表进行插入排序)
- 推荐系统知识梳理——协同过滤
- DenseNet——CNN经典网络模型详解(pytorch实现)
- JavaEE 搜索解决问题集合---会不断更新的
- 【QT 数据库专辑】【01】搭建本地MYSQL数据库 - 工具安装
- Linux awk的 if语句,AWK if(条件)语句与循环简介
- mysql遍历 xml文件路径_解决Mapper接口和mapper.xml的文件位置问题