暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

每日一学之socket编程(一)

程序员的日记本 2017-12-08
346


图片来自于百度图片


什么是socket编程


网络上的两个程序,通过一个双向通信的链路,将两个程序连接起来,那么每一段都是一个socket。因此socket常被称为“套接字”。

对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。千万不要被Java中的SocketServerSocket迷糊了眼睛。

网络的分层


对于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



长按,识别二维码,加关注,

可了解更多编程方面的知识,

让你看到每天一点点的进步。

谢谢点赞 + 分享!!!!!!


不积跬步,无以至千里;

不积小流,无以成江海。


文章转载自程序员的日记本,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论