一、TCP客户端编程
1、TCP的概述
客户端:主动连接服务器、和服务器进行通信
服务器:被动被客户端连接,启动新的线程或进程 服务器客户端(并发服务器)
2、创建TCP套接字
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
socket函数创建的TCP套接字,没有端口,默认为主动连接特性
3、调用connect函数连接服务器
tcp客户端通信之前 必须事先 建立和服务器的连接
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
addr地址结构体 存放的是服务器的IP、PORT 返回值:成功为0 失败-
//连接服务器
struct sockaddr_in ser_addr;
bzero(&ser_addr, sizeof(ser_addr));
ser_addr.sin_family = AF_INET;
ser_addr.sin_port = htons(8000);
ser_addr.sin_addr.s_addr = inet_addr("10.9.11.251");
connect(sockfd, (struct sockaddr *)&ser_addr, sizeof(ser_addr));
如果sockfd没有固定端口 在调用connect时系统自动分配随机端口为源端口
4、send发送消息
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
sockfd:套接字
buf:需要发送的字符串的首元素地址
len:需要发送的字符串的实际长度
flags:默认为0
成功返回实际发送的字节数,失败返回-1
注意:TCP并不能发送0长度报文,但是UDP可以
5、recv接收消息(默认阻塞)
#include <sys/types.h>
#include<sys/socket.h>
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
sockfd:套接字
buf:存放收到的消息
len:最大能接收的长度
flags:默认为0
成功返回收到的实际字节数, 失败返回-1
recv如果收到0长度报文,表明对方已经断开连接。
close(sockfd);断开连接
6、tcp客户端 收发数据
cilent.c
#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>int main(int argc, char const *argv[])
{//创建TCP套接字int sockfd = socket(AF_INET, SOCK_STREAM, 0);if (sockfd < 0){perror("socket");return 0;}printf("sockfd = %d\n", sockfd);//连接服务器struct sockaddr_in ser_addr;bzero(&ser_addr, sizeof(ser_addr));ser_addr.sin_family = AF_INET;ser_addr.sin_port = htons(8082);ser_addr.sin_addr.s_addr = inet_addr("192.168.172.179");connect(sockfd, (struct sockaddr *)&ser_addr, sizeof(ser_addr));//send发送数据send(sockfd, "hello tcp", strlen("hello tcp"), 0);//recv接收数据unsigned char buf[1500] = "";int len = recv(sockfd, buf, sizeof(buf), 0);printf("len=%d buf=%s\n", len, buf);//关闭套接字close(sockfd);return 0;
}
NetAssist充当服务器:
二、TCP服务器编程
1、作为服务器的条件
- 需要bind函数 为服务器绑定固定的端口、IP
- 使用listen函数 让服务器套接字 由主动变被动。
- 等待客户端的连接到来 accept提取到来的客户端。
2、listen 监听函数
- #include<sys/types.h> /* See NOTES */
- #include<sys/socket.h>
- int listen(int sockfd,