700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java 套接字 访问tcp_Java 网络编程(五) 使用TCP/IP的套接字(Socket)进行通信

java 套接字 访问tcp_Java 网络编程(五) 使用TCP/IP的套接字(Socket)进行通信

时间:2020-09-19 20:55:57

相关推荐

java 套接字 访问tcp_Java 网络编程(五) 使用TCP/IP的套接字(Socket)进行通信

套接字Socket的引入

为了能够方便地开发网络应用软件,由美国伯克利大学在Unix上推出了一种应用程序访问通信协议的操作系统用调用socket(套接字)。

socket的出现,使程序员可以很方便地访问TCP/IP,从而开发各种网络应用的程序。

随着Unix的应用推广,套接字在编写网络软件中得到了极大的普及。后来,套接字又被引进了Windows等操作系统中。Java语言也引入了套接字编程模型。

什么是Socket?

Socket是连接运行在网络上的两个程序间的双向通讯的端点。

使用Socket进行网络通信的过程

服务器程序将一个套接字绑定到一个特定的端口,并通过此套接字等待和监听客户的连接请求。

客户程序根据服务器程序所在的主机名和端口号发出连接请求。

如果一切正常,服务器接受连接请求。并获得一个新的绑定到不同端口地址的套接字。(不可能有两个程序同时占用一个端口)。

客户和服务器通过读写套接字进行通讯。

使用ServerSocket和Socket实现服务器端和客户端的Socket通信。

其中:

左边ServerSocket类的构造方法可以传入一个端口值来构建对象。

accept()方法监听向这个socket的连接并接收连接。它将会阻塞直到连接被建立好。连接建立好后它会返回一个Socket对象。

连接建立好后,服务器端和客户端的输入流和输出流就互为彼此,即一端的输出流是另一端的输入流。

总结:使用ServerSocket和Socket实现服务器端和客户端的Socket通信

(1)建立Socket连接

(2)获得输入/输出流

(3)读/写数据

(4)关闭输入/输出流

(5)关闭Socket

通信程序测试

先看效果:

建立服务器端和客户端如下:

1 packagecom.hjp.sockettest;2

3 importjava.io.IOException;4 importjava.io.InputStream;5 .Socket;6

7 public class ServerInputThread extendsThread {8 privateSocket socket;9

10 publicServerInputThread(Socket socket) {11 super();12 this.socket =socket;13 }14

15 @Override16 public voidrun() {17 try{18 //获得输入流

19 InputStream is =socket.getInputStream();20

21 while (true) {22 byte[] buffer = new byte[1024];23

24 int length =is.read(buffer);25

26 String str = new String(buffer, 0, length);27

28 System.out.println(str);29

30 }31

32 } catch(IOException e) {33 e.printStackTrace();34 }35 }36

37 }

1 packagecom.hjp.sockettest;2

3 importjava.io.BufferedReader;4 importjava.io.IOException;5 importjava.io.InputStreamReader;6 importjava.io.OutputStream;7 .Socket;8

9 public class ServerOutputThread extendsThread {10 privateSocket socket;11

12 publicServerOutputThread(Socket socket) {13 super();14 this.socket =socket;15 }16

17 @Override18 public voidrun() {19 try{20

21 OutputStream os =socket.getOutputStream();22

23 while (true) {24 BufferedReader reader = newBufferedReader(25 newInputStreamReader(System.in));26

27 String line =reader.readLine();28

29 os.write(line.getBytes());30 }31 } catch(IOException e) {32 e.printStackTrace();33 }34

35 }36

37 }

1 packagecom.hjp.sockettest;2

3 importjava.io.IOException;4 importjava.io.InputStream;5 .Socket;6

7 public class ClientInputThread extendsThread {8 privateSocket socket;9

10 publicClientInputThread(Socket socket) {11 super();12 this.socket =socket;13 }14

15 @Override16 public voidrun() {17 try{18 //获得输入流

19 InputStream is =socket.getInputStream();20

21 while (true) {22 byte[] buffer = new byte[1024];23

24 int length =is.read(buffer);25

26 String str = new String(buffer, 0, length);27

28 System.out.println(str);29

30 }31

32 } catch(IOException e) {33 e.printStackTrace();34 }35 }36

37 }

1 packagecom.hjp.sockettest;2

3 importjava.io.BufferedReader;4 importjava.io.IOException;5 importjava.io.InputStreamReader;6 importjava.io.OutputStream;7 .Socket;8

9 public class ClientOutputThread extendsThread {10 privateSocket socket;11

12 publicClientOutputThread(Socket socket) {13 super();14 this.socket =socket;15 }16

17 @Override18 public voidrun() {19 try{20

21 OutputStream os =socket.getOutputStream();22

23 while (true) {24 BufferedReader reader = newBufferedReader(25 newInputStreamReader(System.in));26

27 String line =reader.readLine();28

29 os.write(line.getBytes());30 }31 } catch(IOException e) {32 e.printStackTrace();33 }34

35 }36

37 }

1 packagecom.hjp.sockettest;2

3 .ServerSocket;4 .Socket;5

6 public classMainServer {7 public static void main(String[] args) throwsException {8 ServerSocket serverSocket = new ServerSocket(4000);9

10 while (true) {11 //一直处于监听状态,这样可以处理多个用户

12 Socket socket =serverSocket.accept();13

14 //启动读写线程

15 newServerInputThread(socket).start();16 newServerOutputThread(socket).start();17

18 }19

20 }21

22 }

1 packagecom.hjp.sockettest;2

3 .Socket;4

5 public classMainClient {6

7 public static void main(String[] args) throwsException {8 Socket socket = new Socket("127.0.0.1", 4000);9

10 newClientInputThread(socket).start();11 newClientOutputThread(socket).start();12

13 }14 }

参考:/u011134399/article/details/50518673

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