

图片来自于百度图片
什么是socket编程
网络上的两个程序,通过一个双向通信的链路,将两个程序连接起来,那么每一段都是一个socket。因此socket常被称为“套接字”。
对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。千万不要被Java中的Socket和ServerSocket迷糊了眼睛。
网络的分层
对于Java而言,Java的网络类始终只工作在TCP/IP网络中,始终运行在应用层和传输层上,因此,我们只需要了解适用于Internet的标准TCP/IP四层模型。

Java中Socket
Java使用客户端的socket:
1、通过构造函数创建新的socket
Socket socket = new Socket();
2、尝试连接远程主机
InetSocketAddress inetSocketAddress = null;
InetAddress inetAddress = null;
inetAddress = InetAddress.getByName("192.168.1.9");
intSocketAddress = new InetSocketAddress(inetAddress, 9200);
socket.connect(inetSocketAddress);
3、一旦建立连接之后就从socket取得输出流和输入流,使用这两个流收发数据
OutputStream out = null;
InputStream is = null;
out = socket.getOutputStream(); out.write("hello server".getBytes()); byte[] b = new byte[12]; s = socket.getInputStream(); is.read(b);
4、当数据传输完成之后,一端或者两端将关闭连接
out.close(); is.close(); socket.close();
Java使用服务端的socket:
1、通过构造函数创建新的ServerSocket
ServerSocket serverSocket = new ServerSocket();
2、将serverSocket绑定在固定端口
InetSocketAddress inetSocketAddress ;
inetSocketAddress = new InetSocketAddress(9850);
serverSocket.bind(inetSocketAddress);
3、阻塞的方式等待客户端来连接,由于服务端是不会关闭的,因此我们要使用点小手段保证服务端一直等待客户端来连接。连接上来后,就跟客户端处理一样了。
Socket socket = null;
while(true){ socket = serverSocket.accept();
InputStream is = socket.getInputStream(); OutputStream out = socket.getOutputStream();
byte[] b = new byte[12]; is.read(b);
out.write("hello client".getBytes());
is.close(); out.close(); socket.close(); }
有一个小知识点:当你关闭流后,socket其实已经关闭;按照JavaAPI所说,这是一个双工通路。
上面的程序有两个个致命的缺陷,不知道大家能否看出来。那就是同时只能处理一个客户端的连接以及数据只能接收12个字节的长度。
下期提要
下期将使用多线程的方式来解决多用户连接的问题,同时解决不定长数据问题。敬请期待!
源码下载地址:https://pan.baidu.com/s/1nuXu2Dj

长按,识别二维码,加关注,
可了解更多编程方面的知识,
让你看到每天一点点的进步。
谢谢点赞 + 分享!!!!!!

不积跬步,无以至千里;
不积小流,无以成江海。






