linux socket认识

  linux 在C的方式下,服务端的创建主要包括几个模块:套节字的创建、封装IP地址和端口号以及socket连接方式、绑定socket和封装的struct sockaddr_in,

监听的执行、开启服务端,接受client链接、接受客户端消息、发送服务端消息。

  套节字的创建:

  代码:

  int socket;

  socket = new Socket(AF_INET,SOCK_STREAM,0);

  注释:

  1.AF_INET:IPV4网络协议

  2.AF_INET6:IPV6网络协议

  3.SOCK_STREAM:面向链接的TCP协议

  4.SOCK_DGRAM:非链接的UDP协议

  封装IP地址和端口号:

  代码:

  struct sockaddr_in server;

  int port = 8888;

  bzero(&server,sizeof(server));

  server.sin_family=AF_INET

  server.sin_addr.s_addr = INADDR_ANY;

  server.sin_port = htons(port);

  注释:

  1.bzero();用来初始化struct sockaddr_in

  2.sin_family设置网络协议,只能是AF_INET

  3.sin_addr.s_addr用来设置IP地址,INADDR_ANY代表本机IP地址

  4.sin_port用来设置端口号

  绑定socket和struct sockaddr_in

  代码:  

  bind(sock,(struct sockaddr*)&server,sizeof(struct sockaddr));

  注释:

  bind(sock句柄,struct sockaddr_in指针,struct sockaddr_in长度);

  开启监听等待客户端连接:

  代码:

  struct sockaddr_in temp;

  int addresssize;

  int client_sock;

  while(1)

  {

    client_sock=accept(sock,(struct sockaddr_in*)&temp,&addresssize);

  }

  收发客户端数据:

  char buf[1024];

  int len;

  recv(client_sock,buf,1024,0);

  printf("client recv:%s\n",buf);

  len=strlen(buf);

  send(client_sock,buf,len,0);

时间: 2024-10-10 14:48:37

linux socket认识的相关文章

Android Jni层 创建 linux socket 出错问题解决

问题: 想在Jni层创建 udp socket 与服务端通信,但是没有成功,最后发现竟然是创建socket失败(代码如下) // create socket g_sd = socket(AF_INET, SOCK_DGRAM, 0); if (-1 == g_sd) { perror("socket()"); goto err_socket; } 解决办法: 在 AndroidManifest.xml 文件中,添加访问网络的权限: <uses-permission android

Linux socket编程的心跳机制总结

Linux socket编程的心跳机制总结 我写这篇文章的目的是想总结一下心跳机制的使用,因为最近两个项目的TCP通信中都使用了这个方法,感觉用法好诗比较经典的,所以拿出来与大家共享. 什么是心跳机制 心跳机制就是当客户端与服务端建立连接后,每隔几分钟发送一个固定消息给服务端,服务端收到后回复一个固定消息给客户端,如果服务端几分钟内没有收到客户端消息,则视客户端断开.发送方可以是客户端和服务端,看具体需求. 为什么要使用 我们都知道在TCP这种长连接情况下下,有可能有一大段时间是没有数据往来的,

Linux socket编程 DNS查询IP地址

本来是一次计算机网络的实验,但是还没有完全写好,DNS的响应请求报文的冗余信息太多了,不只有IP地址.所以这次的实验主要就是解析DNS报文.同时也需要正确的填充请求报文.如果代码有什么bug,欢迎指正啊.代码排版有点乱... 本文有以下内容 DNS报文的填充和解析 利用socket API传输信息 一.填充DNS请求报文 随便百度一下,就可以知道DNS报文的格式.所以这里只介绍如何填充DNS报文. 首先是填充报文首部: ? 1 2 3 4 5 6 7 8 9 /* 填充首部的格式大致相同,下面的

linux socket中的SO_REUSEADDR

Welcome to the wonderful world of portability... or rather the lack of it. Before we start analyzing these two options in detail and take a deeper look how different operating systems handle them, it should be noted that the BSD socket implementation

windows 与 Linux SOCKET通讯

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 windows client 端口 // Def_win_client_socket_test.cpp :

Linux Socket编程

Linux Socket编程 一.Socket编程具体函数解析参考网址 http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html(本文转载于此网址,转载请注明源链接) 二.Socket编程的基本知识 2.1 基本TCP客户/服务器程序套接字函数 图2.1 TCP服务器/客户端响应方式 2.2 TCP三次握手 图2.2 TCP 三次握手建立连接 2.3 TCP断开连接 图2.3 TCP 四次握手断开连接 三.Socket编程细节知识

linux socket网络编程 常用函数及头文件

转自:http://blog.chinaunix.net/u3/102500/showart_2065640.html 一 三种类型的套接字: 1.流式套接字(SOCKET_STREAM) 提供面向连接的可靠的数据传输服务.数据被看作是字节流,无长度限制.例如FTP协议就采用这种. 2.数据报式套接字(SOCKET_DGRAM) 提供无连接的数据传输服务,不保证可靠性. 3.原始式套接字(SOCKET_RAW) 该接口允许对较低层次协议,如IP,ICMP直接访问. 二 基本套接字系统调有有如下一

Linux Socket Programming by Example-第十八章 实战

第18章主要介绍了一个软件实践项目. 架构: C/S 功能:实现一个股票信息广播发布平台. 这个代码本身对2年工作以上的人来说,毫无参考价值. 主要的是软件本身引发的一些发散思考. 最近智能家电 物联网 大数据 数字医疗等都很火热. 这些设备均涉及到2个网络, 一个是基于WIFI.以太网的局域网 一个是基于ISP服务的互联网. 具体构架: 家里的智能设备     -> WiFi  ->  智能路由器 -> ISP ->  互联网 (远程服务器) 如果将智能路由器扩展下,变成带数据库

Linux - Socket网络套接字

OSI七层协议功能 物理层 面向物理传输媒体,屏蔽媒体的不同 主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流(就是由1.0转化为电流强弱来进行传输,到达目的地后在转化为1.0,也就是我们常说的模数转换与数模转换).这一层的数据叫做比特. 链路层 面向一条链路,成帧和无差错传输 主要将从物理层接收的数据进行MAC地址(网卡的地址)的封装与解封装.常把这一层的数据叫做帧.在这一层工作的设备是交换机,数据通过交换机来传输. 网络层 分配地址.

Linux socket用法

转自:http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html  有删改 1.网络中进程之间如何通信? 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的和具名的) 远程过程调用(Solaris门和Sun RPC) 但这些都不是本文的主题!我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯一标识一