02 Socket网络编程

概述:

Socket又称为套接字,用于描述IP地址和端口,是一个通信链的句柄;

Socket是为网络编程提供的一种机制;

通信两端都有Socket,网络编程就是Socket之间的通信,数据在两个Socket之间通过IO流传输

学习Socket编程之前,先要了解网络通信的三i个要素,即IP端口号传输协议。

ip是设备在网络里面的地址。

端口号是用于标识进程的逻辑地址

  • 每个网络程序都会至少有一个逻辑端口
  • 用于标识进程的逻辑地址,不同进程的标识
  • 有效端口:0-65535,其中0-1024系统使用或保留端口

协议:主要有UDP协议和TCP协议

  • UDP协议是将数据源和目的封装成数据包,不需要建立连接,并且每个数据包的大小限制在64k,是一种不可靠协议,优点在于速度快
  • TCP协议是建立连接,并形成数据传输的通道;可以在连接中传输大量的数据;通过三次握手完成连接,是一种可靠协议,但效率较低

下面就围绕UDP和TCP这两种协议进行网络编程:

 1.UDP协议

  • 发送端执行步骤
  1. 创建发送端Socket对象
  2. 创建数据并打包
  3. 发送数据
  4. 释放资源

代码如下:

    public static void main(String[] args) throws Exception {
        //创建发送端Socket对象
        DatagramSocket socket = new DatagramSocket();
        //创建数据并打包
        //DatagramPacket(byte buf[], int length,  InetAddress address, int port)
        String message = "hello,UDP,I‘m sender";
        byte[] bytes = message.getBytes();
        int length = bytes.length;
        InetAddress address = InetAddress.getByName("DESKTOP-KHNDCKQ");
        int port =8888;
        DatagramPacket p = new DatagramPacket(bytes,length,address,port);
        //发送数据
        socket.send(p);
        //释放资源
        socket.close();
    }

需要注意的是,发送端发送数据,需要指定目标ip或主机名,以及端口号。

  • 接收端执行步骤
  1. 创建接收端Socket对象
  2. 接收数据
  3. 解析数据
  4. 输出数据
  5. 释放资源

代码如下:

        //创建接收端对象
        DatagramSocket socket = new DatagramSocket(8888);
        //接收数据
        byte[] bytes = new byte[1024];
        DatagramPacket data = new DatagramPacket(bytes,bytes.length);
        socket.receive(data);//阻塞
        //解析数据
        InetAddress address =  data.getAddress();//获取发送端IP
        byte[] receivedata  = data.getData();
        int length = data.getLength();
        //输出数据
        System.out.println("send--->>"+address.getHostAddress());
        System.out.println(new String(receivedata,0,length));
        System.out.println(new String(bytes,0,length));
        //释放资源
        socket.close();

说明:在接收端运行的时候,程序会在

socket.receive(data);

这一步进行阻塞,也就是等待发送端发送数据。接收的时候,也是用DatagramPacket类进行接收。

获取数据的方式有两种,一个是构造方法中传入的bytes参数,接受到数据后会直接写到bytes里;还有一种接受方式是通过DatagramPacket实例化对象的getData()方法,赋值给任意要给byte数组。

当然,在Socket编程中有一些墨守成规的规定,也是需要遵守的。

注意事项:

  1. 如果发送端发送的端口号是错误的,因为UDP是一种不需要建立连接的协议,所以这个数据是可以正常发出去的,也不会出现异常。但是接收方无法接收到数据
  2. 端口号的作用和属性前面也描述了,所以一个端口一次只能给一个进程使用,如果已经被使用的端口,其他程序想要去使用就会抛出端口被占用的异常。
DatagramPacket

原文地址:https://www.cnblogs.com/wlym/p/9736041.html

时间: 2024-11-02 15:21:43

02 Socket网络编程的相关文章

Python Socket 网络编程

Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ 聊天.收发 email 等等.要解决网络上两台主机之间的进程通信问题,首先要唯一标识该进程,在 TCP/IP 网络协议中,就是通过 (IP地址,协议,端口号) 三元组来标识进程的,解决了进程标识问题,就有了通信的基础了. 本文主要介绍使用 Python 进行 TCP Socket 网络编程,假设你已

Socket网络编程--简单Web服务器(6)

本来是想实现ssl连接的,但是弄了好久都不成功,就索性不做了,等以后有能力再做了.所以这一小节就是本次的最后一节了.就简单的说几个注意点. 1.加个配置文件 使用单例模式,使用一个类,该类保存一些信息,例如一个配置类的一个属性为PAGE404的字符串,该字符串保存一个文件地址,然后我们的Page_404函数就可以用access判断PAGE404这个字符串对应的文件是否存在,如果存在那么如果是404页面那么就cat这个文件,而不是默认的404函数里面的页面.还有个端口什么的都是通过一个类似宏定义一

Socket网络编程(TCP/IP/端口/类)和实例

Socket网络编程(TCP/IP/端口/类)和实例 原文:C# Socket网络编程精华篇 转自:微冷的雨 我们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念: TCP/IP层次模型 当然这里我们只讨论重要的四层 01,应用层(Application):应用层是个很广泛的概念,有一些基本相同的系统级TCP/IP应用以及应用协议,也有许多的企业应用和互联网应用.http协议在应用层运行. 02,传输层(Tanspot):传输层包括UDP和TCP,UDP几乎不对报文进行检查,而

socket 网络编程快速入门(一)教你编写基于UDP/TCP的服务(客户端)通信

因为UNIX和Win的socket大同小异,为了方便和大众化,这里先介绍Winsock编程. socket 网络编程的难点在入门的时候就是对基本函数的了解和使用,因为这些函数的结构往往比较复杂,参数大部分都是结构体,令人难以记忆和理解. 但是一旦我们知道这些函数包括其参数的具体含义,socket网络编程也就变得不是那么复杂.这里不赘述 具体函数的详细含义,网络上有很多的文章,同时笔者建议大家参考 MSDN,对返回值,参数等会有更好的理解. 以下均为单线程的简单实例,多线程的请关注下一篇文章. (

Socket网络编程--网络爬虫(1)

我们这个系列准备讲一下--网络爬虫.网络爬虫是搜索引擎系统中十分重要的组成部分,它负责从互联网中搜集网页,采集信息,这些网页信息用于建立索引从而为搜索引擎提供支持,它决定着整个引擎系统的内容是否丰富,信息是否即时,因此其性能的优劣直接影响着搜索引擎的效果.网络爬虫的基本工作原理: (1)从一个初始URL集合中挑选一个URL,下载该URL对应的页面: (2)解析该页面,从该页面中抽取出其包含的URL集合,接下来将抽取的URL集合再添加到初始URL集合中: (3)重复前两个过程,直到爬虫达到某种停止

windows下的socket网络编程(入门级)

windows下的socket网络编程 clinet.c 客户端 server.c 服务器端 UDP通信的实现 代码如下 已经很久没有在windows下编程了,这次因为需要做一个跨平台的网络程序,就先写了个简单的winSocket网路通信的例子,以便以后用到的时候有个参考. windows下使用winsock编程与linux/unix的区别在于windows下需要先有一个初始化的操作,结束的时候需要一个清理的操作.还有windows下编译的时候需要连接ws32_lib库. 大致过程如下 1.初始

Linux Socket 网络编程

Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后,过段时间不看,重新拾起这些知识的时候又要从头开始,所以,在这里做个笔记也算是做个模板,以后可以直接从某一个阶段开始接着玩... 1. socket套接字介绍 socket机制其实就是包括socket, bind, listen, connect, accept等函数的方法,其通过指定的函数实现不同

linux下C语言socket网络编程简例

转自:http://blog.csdn.net/kikilizhm/article/details/7858405 这里给出在linux下的简单socket网络编程的实例,使用tcp协议进行通信,服务端进行监听,在收到客户端的连接后,发送数据给客户端:客户端在接受到数据后打印出来,然后关闭.程序里有详细的说明,其中对具体的结构体和函数的实现可以参考其他资料. 程序说明: 这里服务器的端口号和ip地址使用固定的设置,移植时可以根据具体情况更改,可以改写为参数传递更好,这里为了方便,使用固定的. 移

Socket网络编程 详细过程(转)

我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的.本文的主要内容如下: 1.网络中进程之间如何通信? 2.Socket是什么? 3.socket的基本操作 3.1.socket()函数 3.2.bind()函数 3.3.listen().co