一个典型的流 socket 服务器会使用socket()创建其 socket,然后使用bind()将这个 socket绑定到一个众所周知(即需要通信的ip地址+端口)的地址上。服务器接着调用listen()以允许在该socket上接受连接。监听socket 上的客户端连接是通过accept()来接受的,它将返回一个与客户端的socket进行连接的新socket的文件描述符。
/*局域网TCP客户端*/#include<sys/types.h>#include<sys/socket.h>#include<stdio.h>#include<netinet/in.h>#include<arpa/inet.h>#include<unistd.h>#include<string.h>#include<stdlib.h>#include<fcntl.h>#include<sys/shm.h>#define MYPORT 7000#define BUFFER_SIZE 1024intmain(){///定义sockfdin...
int CreateSocket()//创建套接字 { _socketfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if(_socketfd < 0) { perror("socket"); return -1; } return 0; } int BindAddr(string ip, uint16_t port)//绑定端口和ip { struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_po...
listen函数的第一个参数即为要监听的socket描述字,第二个参数为相应socket可以排队的最大连接个数。socket()函数创建的socket默认是一个主动类型的,listen函数将socket变为被动类型的,等待客户的连接请求。 connect函数的第一个参数即为客户端的socket描述字,第二参数为服务器的socket地址,第三个参数为socket地址的长度。
使用TCP/IP协议的应用程序通常采用应用编程接口:UNIX BSD的套接字(socket)和UNIX System V的TLI(已经被淘汰),来实现网络进程之间的通信。就目前而言,几乎所有的应用程序都是采用socket,而现在又是网络时代,网络中进程通信是无处不在,这就是我为什么说“一切皆socket”。
#include <sys/socket.h> ssize_t send(int sockfd, const void *buf, size_t len, int flags); ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen); 当套接字处于“已连接”的状态时,才可以使用send,当flags = 0 时 ...
linux网络编程之socket编程(十六) 继续学习socket编程,今天的内容会有些难以理解,一步步来分解,也就不难了,正入正题: 实际上sockpair有点像之前linux系统编程中学习的pipe匿名管道,匿名管道它是半双工的,只能用于亲缘关系的进程间进行通信,也就是说父子进程或兄弟进程间进行通讯,因为它是没有名称的,父子进程可以...
#include <sys/socket.h> int accept(intsockfd, const struct sockaddr *clientaddr, socklen_taddrlen) 输入参数:sockfd是socket套接字描述符,clientaddr指向客户的网络地址结构,addrlen是网络地址结构的大小。 返回值:成功返回非负描述符,出错返回-1
socket() → connect() → send()/write() ↔ recv()/read() → close() 创建socket → 连接指定服务器的IP/端口号 →向socket中写入信息 → 关闭socket 二、C++代码实现 1、server.cpp 按照该实现,服务器每次只能服务一个客户端。 #include<iostream>#include<sys/types.h>#include<sys/socket.h>#in...