Java - hello/hi的简单的网络聊天程序

  • 什么是Socket 
           在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。 socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。
     套接字 在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一的标识网络通讯中的一个进程,“IP地址+TCP或UDP端口号”就为socket,即可以通过IP地址唯一的确定一台主机,再加上端口号既可以唯一的确定一个进程,这样就可以实现端到端的通信。
  在TCP协议中,建立连接的两个进程(客户端和服务器)各自有一个socket来标识,则这两个socket组成的socket pair就唯一标识一个连接。TCP是面向连接的可靠地服务,因此常用与文件传输系统,但TCP需要经历“三次握手”、“四次挥手”来保证连接的可靠性所以建立有建立连接时延。相比之下UDP服务为非面向连接的服务,常用与语音通话视频通话等,对延迟要求高的地方。

三次握手 

四次挥手

  socket本身就有“插座”的意思,因此用来形容网络连接的一对一关系,为TCP/IP协议设计的应用层编程接口称为socket API。
  我的理解就是Socket就是该模式的一个实现:即socket是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)。
  Socket()函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。
  • Socket的应用

  

  Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

  那么Socket提供了那些函数呢?

    使用socket()函数创建套接字
    int socket(int af, int type, int protocol);
    服务器端要用 bind() 函数将套接字与特定的IP地址和端口绑定起来
    int bind(int sock, struct sockaddr *addr, socklen_t addrlen); 
    connect() 函数用来建立连接
    int connect(int sock, struct sockaddr *serv_addr, socklen_t addrlen); 
    通过** listen() 函数**可以让套接字进入被动监听状态
    int listen(int sock, int backlog); 
    通过 accept() 函数来接收客户端请求
    int accept(int sock, struct sockaddr *addr, socklen_t *addrlen); 
  • Java - Hello/Hi聊天程序 

   服务器端

   1.服务器端用ServerSocket类来创建socket对象。

   2.使用accept方法监听

   3.建立连接后使用输入输出流进行聊天

   4.释放资源

     客户端:

     1.使用Socket类创建爱你客户端的Socket对象

     2.通过IP地址和端口号建立连接

     3.通过输入输出流进行通信

     4.释放资源

猜你喜欢

转载自www.cnblogs.com/smjsoftware/p/12024456.html
今日推荐