1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > socket接口调用 java_Java中socket接口调用(示例代码)

socket接口调用 java_Java中socket接口调用(示例代码)

时间:2022-04-24 03:29:08

相关推荐

socket接口调用 java_Java中socket接口调用(示例代码)

最近一个项目中接口通讯这一块主要是调用银联系统的socket接口,我方是客户端,即发送请求接收返回报文的一方。在贴代码之前,还是要了解一下关于socket的基础知识。

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接口的连接是由包中的类实现的。如图表示的是Socket连接过程中客户端和服务器端的工作原理。

每个server端都拥有一个端口号,一台机器上如果运行多个服务,这可能对应多个端口号。通信结束后,两端分别关闭对应的Socket接口,而不影响其他的端口。

Socket通信的基本步骤

使用Socket方式进行网络通信的程序基本结构都是类似的,无论一个Socket通信程序的功能多么齐全、程序多么复杂,其基本结构都是一样的。客户端与服务器端进行通信的过程都包括以下四个基本步骤:

(1)在服务器端指定一个用来等待连接的端口号,在客户端规定一个主机和端口号,从而在客户端和服务器端创建Socket/ServerSocket实例。

(2)打开连接到Socket的输入输出流。

(3)利用输入输出流,按照一定的协议对Socket进行读写操作。

(4)关闭输入输出流和Socket

通常,程序员的主要工作时针对所要完成的功能砸器第(3)步进行编程,第(1)、(2)、(4)步对所有的通信程序来说几乎都是一样的。

Socket类中常用的构造函数

1:Socket(InetAddress address,int port) :该方法用于创建一个链接,向指定的IP地址上指定的端口的服务器端程序发送连接请求

2:Socket(InetAddress address,int port) :同上,但该方法允许通过主机名字符串向服务器发送连接请求

Socket类中常用的方法

1:InetAddress getLocalAddress() :返回和Socket进行连接的本地的IP地址

2:int getLocalPort() :返回和Socket进行连接的本地的端口号

3:InetAddress getInetAddress():返回Socket建立了连接的服务器的IP地址

4:int getPort():返回和Socket建立了连接的服务器的端口号

5:InputStream getInputStream() :返回当前Socket的输入流(常用)

6:OutputStream getOutStream():返回当前Socket的输出流(常用)

7:void close():关闭当前的Socket 连接

ServerSocket中常用的构造函数

1:ServerSocket(int port) :这是构造方法用于在当前的服务器默认的IP地址上监听一个指定的端口,即在指定的IP和端口创建一个ServerSocket对象

ServerSocket中常用的方法

1:Socket accept() :产生阻塞,监听指定的端口,直至有客户端发来连接请求(常用)

2:void close() :关闭当前ServerSocket

3:InetAddress getInetAddress() :返回ServerSocket监听的本机的IP地址

4:int getLocalPort(): 返回ServerSocket监听的,本机的IP地址上指定的端口号

5:int getSoTimeout()::void setSoTimeout(int timeout) 设置连接过程中没有得到相应的等待期限时间(TimeOut)

6:String toString() : 以字符串的方式返回ServerSocket监听的,本机的IP地址及其端口号

Socker通信的程序设计

终于到了贴代码的时间了。。。。。

1.服务器端程序

public static voidmain(String[] args) {//定义ServerSocket和Socket对象

ServerSocket ss = null;

Socket sk;//定义发送字符串,即客户端收到的信息

String sendString = "hello!我是服务端...";//定义OutputStream类

OutputStream s1out;//定义DataOutputStream类

DataOutputStream dos;//通过1314端口建立连接

try{//创建ServerSocket并把传入端口号

ss = new ServerSocket(1314);

}catch(Exception e) {

e.printStackTrace();

}//循环运行监听程序,以监视连接请求

while (true) {try{//监听端口请求,等待连接

sk =ss.accept();//得到与socket相连接的数据流对象

s1out =sk.getOutputStream();

dos= newDataOutputStream(s1out);//发送字符串

dos.writeUTF(sendString);//关闭数据流(但不是关闭Socket连接)

dos.close();

s1out.close();

sk.close();

}catch(Exception e) {

e.printStackTrace();

}

}

}

2.客户端程序

/*** 采用socket连接向服务器发送消息,接受响应信息 注意,如果是通过不同的ip port确定调用接口 这个方法要重写,将ip

* port作为请求条件,现改为传固有参数进来

*

*@paramtext

*@throwsException*/

public staticString sendBySocket(String text, String ip, int port)throwsException {log.info("开始建立socket连接");

Socket socket= newSocket(ip, port);

InputStream is=socket.getInputStream();

InputStreamReader isr= new InputStreamReader(is, "GBK");//2.获取客户端输出流

OutputStream dos =socket.getOutputStream();

log.info("连上服务端");//3.向服务端发送消息

dos.write(text.getBytes());

dos.flush();

log.info("成功向服务器发送消息");//4.获取输入流,并读取服务器端的响应信息

BufferedReader br = newBufferedReader(isr);

String returnInfo=br.readLine();

log.info("服务器端返回数据为:" +returnInfo);//4.关闭资源

br.close();

isr.close();

is.close();

dos.close();

socket.close();returnreturnInfo;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。