每日一学之socket编程(一)

图片来自于网络

什么是socket编程

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

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

网络的分层

对于Java而言,Java的网络类始终只工作在TCP/IP网络中,始终运行在应用层和传输层上,因此,我们只需要了解适用于Internet的标准TCP/IP四层模型。

Java中Socket

Java使用客户端的socket:

1、通过构造函数创建新的socket

2、尝试连接远程主机

3、一旦建立连接之后就从socket取得输出流和输入流,使用这两个流收发数据

4、当数据传输完成之后,一端或者两端将关闭连接

Java使用服务端的socket:

1、通过构造函数创建新的ServerSocket

2、将serverSocket绑定在固定端口

3、阻塞的方式等待客户端来连接,由于服务端是不会关闭的,因此我们要使用点小手段保证服务端一直等待客户端来连接。连接上来后,就跟客户端处理一样了。

有一个小知识点:当你关闭流后,socket其实已经关闭;按照JavaAPI所说,这是一个双工通路。

上面的程序有两个个致命的缺陷,不知道大家能否看出来。那就是同时只能处理一个客户端的连接以及数据只能接收12个字节的长度。

本文来自企鹅号 - 人人会编程媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

selec/poll中的读写事件和epoll中的读写事件

在Linux网络编程中,常常使用select和poll来做事件触发,监听socket的读写状态,然后进行读写操作。现在新的linux内核中,增加了epoll事件...

3084
来自专栏软件开发 -- 分享 互助 成长

IP地址分类及私网IP

5类IP地址: IP地址共有32位字节,其中A~C类IP地址由类标识号、网络地址和主机地址组成,A类标识最高位为0,网络地址为1字节,主机地址为3字节, B类标...

1917
来自专栏云霄雨霁

数据库事务总结

1476
来自专栏蓝天

Linux上的TIME_WAIT和tcp_fin_timeout

当Linux服务器的TIME_WAIT过多时, 通常会想到去修改参数降低TIME_WAIT时长, 以减少TIME_WAIT数量,但Linux并没有提供这样...

664
来自专栏开发 & 算法杂谈

Unix域协议学习小结

Unix域协议不是一个真正意义上的协议族,只是一个利用socket api在单个主机上进行进程间通信的方法。它不需要走传统网络协议栈,也就不需要计算校验和、维护...

3072
来自专栏用户2442861的专栏

accept()返回的套接字绑定哪个端口 新旧套接字的联系

摘要:对于服务器编程中最重要的一步等待并接受客户的连接,那么这一步在编程中如何完成,accept函数就是完成这一步的。它从内核中取出已经建立的客户连接,然后把...

752
来自专栏小巫技术博客

代码Review的一些事

783
来自专栏解Bug之路

从linux源码看socket的close

笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。上篇博客讲了socket的阻塞和非阻塞,这篇就开始谈一谈socket的...

1477
来自专栏互联网大杂烩

拜占庭容错机制

Client会发送一系列请求给各个replicas节点来执行相应的操作,BFT算法保证所有正常的replicas节点执行相同序列的操作。因为所有的replica...

622
来自专栏大愚Talk

为什么要用Redis

最近阅读了《Redis开发与运维》,非常不错。这里对书中的知识整理一下,方便自己回顾一下Redis的整个体系,来对相关知识点查漏补缺。

702

扫码关注云+社区