socket编程——一个简单的例子

C语言程序设计100个经典例子 <1>数字排列。 #include <stdio.h> int main() { int sum= 0; for(int i= 1; i< 5; i++) { for(int a= 1; a< 5; a++) { for(int b= 1; b< 5; b++) { if(i!=a && i!=b && a!=b) { printf("%d%d%d", i, a, ... 阅读详情

从一个简单的使用TCP例子开始socket编程,其基本步骤如下:

server                                                  client

 

+++++++                                          ++++++++

创建socket                                          创建socket

+++++++                                          ++++++++

      |                                                         |

      |                                                         |

      |                                                         |

+++++++                                          ++++++++

地址赋值(                                           地址赋值(

自己的地址)                                        服务器地址)

+++++++                                          ++++++++

      |                                                         |

      |                                                         |

      |                                                         |

++++++++                                              |

用bind绑定                                                |

socket和地址                                             |

++++++++                                              |

      |                                                         |

      |                                                         |

      |                                                         |

+++++++                                                 |

listen                                                         |

+++++++                                                  |

      |                                                    ++++++++++

      |   <------------------------------          connect 服务器         

      |                                                    ++++++++++

+++++++                                                  |

accept                                                        |

+++++++                                                  |

      |                                                           |

      |                                                    +++++++++

      |                                                     recv 和send

      |                                                     进行数据处理

      |                                                     +++++++++

+++++++++                                                |

用accept得到                                                 |

的socket进行                                                 |

recv 和 send                                                 |

+++++++++                                                |

      |                                                             |

      |                                                             |

      |                                                             |

+++++++++                                        +++++++++

close socket                                         close socket

+++++++++                                        +++++++++

 

根据以上步骤,服务器端的代码为

 

 

客户端代码为:

 

 

现在一个简单的使用tcp的socket通信的例子已经完成了,这里有几个需要说明的问题

1)头文件:

sys/socket.h   包含了socket相关的函数,如socket,send 和recv, 以及struct sockaddr等

netinet/in.h    包含了地址结构,如struct sockaddr_in

errno.h           包含了errno 和 EINTR

syslog.h         包含了syslog相关的信息,其打印结果在/var/log/messages里面

 

2)socket地址

对于IPv4来说,其地址用的是struct sockaddr_in,具体结构如下

 其中sin_len我们一般不关注,也不填(只有在使用routing socket的时候才用到,被内核用来处理各种协议簇的地址结构)。bind, connect, sendto, 和 sendmsg会把socket地址从程序传递给内核; 而accept, recvfrom, recvmsg, getpeername, 和 getsockname会把地址从内核传递给程序。因为不同协议簇的地址结构是不一样的,所以必须要有一个通用的指针来传递地址,对于ANSI C来说我们一般使用void *,但是socket产生早于ANSI C,所以也就没有使用这个机制,而是使用一个通用的地址结构struct sockaddr来处理的 IPv6的socket地址为struct sockaddr_in6 对于sockaddr-in6来说,我们不能用通用的地址struct sockaddr来存储了,而是产用新的通用地址结构struct sockaddr_storage,这个结构足够大可以存储任何系统支持的地址。 几种常见的地址结构3) 相关函数的的length对于从程序传地址给内核的函数(如connect),其长度是一个整型值,告诉内核要copy的地址长度。对于从内核传递给程序的函数(如accpt),其长度是一个整型指针,是一个value-result参数。有两个目的:一告诉内核地址结构的长度,让内核在copy的时候不要超过这个长度;二返回内核真正copy的长度。4)字节序socket相关的函数都是使用网络字节序5)地址转换函数inet_aton, inet_ntoa, and inet_addr把IPv4字符串地址转为32位的网络字节序地址inet_ptonand inet_ntop可以转换IPv4和IPv6的地址6)listen中的backlog要知道这个值的含义先用说一下,对于一个listen的socket,有两个队列:一个是incomplete connection队列(仅仅收到SYN);一个是complete connection队列(三次握手完成)。accept函数就是在complete connection队列中取一个socket。backlog就是指队列的个数,但不行的是各个地方都没有明确定义这个值,没有说明究竟代表了哪个队列,或是两个队列之和。一般来说可以同时处理的连接数是backlog的1.5倍,很多地方都用5.7) getsockname 和 getpeername这两个函数可以与socket关联的地址,getsockname 和 getpeername分别得到自己和对端的地址
 

 

 

 

 

 

Socket编程实战 Socket编程实战网络编程抓包分析“金庸梦”游戏客户端分析TCP协议原始套接字编程Socket应用实例面向连接的流式套接字c/s非阻塞的多人聊天服务器IPv4总结 网络编程抓包分析 “金庸梦”游戏客户端分析TCP协议 运行游戏客户端(参考上篇文章) 打开wireshark,开始抓包,筛选tcp包 连接时的三次握手 断开服务器的四次握手 原始套接字编程 将虚拟机网络适配器的连接模式更改为桥接模式 进入虚拟机,创建一个名为Teardrop的文件,并输入以下代码 #includ 阅读详情

相关推荐

2023电视专用!安卓电子相册APP避坑指南(附开源代码)

本文针对2023年智能电视用户,提供安卓电子相册APP的避坑指南与实战教程。文章详细解析了电视端相册应用的常见广告与兼容性陷阱,并指导用户如何安全获取、部署纯净的APK应用,通过核心设置实现无广告的个性化图片轮播体验,最终打造专属的家庭回忆墙。

weixin_29012677的博客 434

Socket 编程基础

套接字(socket)是 Linux 下的一种进程间通信机制(socket IPC),在前面的内容中已经给大家提到过,使用 socket IPC 可以使得在不同主机上的应用程序之间进行通信(网络通信),当然也可以是同一台主机上的不同应用程序。socket IPC 通常使用客户端服务器这种模式完成通信,多个客户端可以同时连接到服务器中,与服务器之间完成数据交互。内核向应用层提供了 socket 接口,对于应用程序开发人员来说,我们只需要调用 socket 接口开发自己的应用程序即可!

Bit_Dong的博客 3万+

30、JAVA进阶——Socket编程

一、Socket知识 1. Socket概述 2. Socket通信原理 3. java.net包 二、基于TCP协议的Socket编程 1.Socket类和ServerSocket类 2.使用Socket编程实现登录功能 三、基于UDP协议的Socket编程 1.DatagramPacket类和DatagramSocket类 2.使用Socket编程实现客户咨询

不迁怒,不贰过。小知识,大智慧。 2万+

TCP编程函数和步骤

TCP编程的服务器端一般步骤是1、 创建一个socket,用函数socket();2、 设置socket属性,用函数setsockopt(); * 可选3、 绑定IP地址、端口等信息到socket上,用函数bind();4、 开启监听,用函数listen();5、 接收客户端上来

深度Java 7258

java socket编程简单实例_一个简单的java socket编程例子

关于scoekt的一些介绍,请参加度娘上的内容,链接为:http://baike.baidu.com/view/13870.htm下面是自己写的一个socket的小例子,当前功能只是初步调试了下。服务端代码如下:import java.awt.AWTException;import java.awt.Robot;import java.io.BufferedInputStream;import j...

weixin_29608135的博客 651

java socket编程例子_Java Socket 编程

Overviewsocket编程旨在通过网络让运行再不同的电脑上的程序能相互通讯。socket编程中有两种通讯协议:TCP 和 UDP。下面将介绍据于TPC/IP**的教程,使用Java编写客户端/服务器(C/S)应用程序。学这个教程前, 你应该已经知道:基本的计算机网络Java IO的基本操作java 多线程的基本操作单元测试源代码请见github简单例子让我们弄清楚这些客户端和服务器最基本的...

weixin_39919195的博客 512

Socket编程详解:从基本概念到实例应用(TCP|UDP C语言实例详解)

Socket编程详解:从基本概念到实例应用

深耕嵌入式领用多年, 致力于分享嵌入式领域技术! 2万+

Socket网络编程

socket编程也叫套接字编程,应用程序可以通过它发送或者接受数据,可对其像打开文件一样打开/关闭/读写等操作.套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信.网络套接字是IP地址与端口号TCP协议的组合Socket就是为网络编程提供的一种机制,通信的两端都有Socket网络通信其实就是Socket之间的通信,数据在两个Socket之间通过I/O进行传输.

m0_67390969的博客 3446

Socket网络编程:TCP与UDP

socket网络编程:TCP与UDP

Edward2022的博客 8540

【计算机网络】Socket编程

计算机网络基础,站在应用层使用TCP和UDP协议,理解IP地址、端口号,认识TCP和UDP,使用socket常见API学习,编写简单的应用层TCP/UDP网络程序,例如绑定端口号,建立连接,接收请求,发起连接,接收网络数据等,并使用多种方法优化服务器(多进程,多线程,线程池), 初步理解TCP协议三次握手,四次挥手,以及计算机网络学习路线规划

m0_69442905的博客 6320

socket编程详解

网络通信的本质是进程间通信,是一种需要依靠IP地址和端口号的进程间通信,我们把这种基于IP地址和端口号的进程间通信叫做socket通信。socket的中文意思是插座,socket通信的模式类似于插板插座这样的模式,通信双方都必须要知道对方的IP地址和端口号就相当于把插板和插线接通,这样才能进行通信。而基于这种模式进行网络通信的编程就是socket编程。(Socket,通常也称为“套接字”)

知其然 知其所以然 7955

一文带你了解socket网络编程以及详解过程和原理

Socket(套接字)是计算机网络编程中的一种抽象概念,它提供了在网络上进行通信的接口。通过使用 Socket,可以在不同计算机之间建立连接,并进行数据的传输和交换。通过 Socket,客户端可以与服务器建立连接并发送请求,服务器接收请求并返回响应。通过 Socket,可以在多个用户之间实现实时的文字、音频或视频通信。可以使用 Socket 在不同计算机之间传输文件,如上传和下载文件。可通过 Socket 在远程计算机上执行指令或操作。

m0_68987535的博客 2万+

华为OD机考双机位C卷 - 两个字符串间的最短路径(Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 两个字符串间的最短路径(OD上机考试双机位C卷)。提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 810

基于matlab的卷积神经网络实现手写数字识别

基于matlab的卷积神经网络实现手写数字识别

上一篇: Linux中/proc目录下文件详解(三)
下一篇: socket编程 —— 非阻塞socket
wind19
博客等级 码龄23年 477粉丝 170原创
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值