UNIX网络编程TCP客户端步骤(在linux环境下)
1. 必需包含的头文件
#include<sys/types.h>
#include<sys/un.h>
#include<netinet/in.h>
//如果要用到linux下面的socket函数,包含
#include<sys/socket.h>
//要用到bzero包含
#include<strings.h>
//要用到输入输入,包含
#include<stdio.h>
2. 注意区分struct sockaddr结构与struct sockaddr_in结构
struct sockaddr为通用,但以上两者在定义时做了补齐处理,
两者可以互相转换
3. 创建本地套接字
int sockfd;
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd <0)
{
//创建本地套接字出错
}
4. 连接服务端
struct sockaddr_in servaddr;
bzero(servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(2501); //转换本地字节序为网络字节序,端口为2501
if(inet_pton(AF_INET,"192.168.1.100",&servaddr.sin_addr) <= 0)
{
//转换地址出错
}
#define BUFF_SIZE 256
typedef struct sockaddr SA;
char buff[BUFF_SIZE+1];
//因connect参数为struct sockaddr结构,要将struct sockaddr_in转化为struct sockaddr结构,
//不然有警告错误
if(connect(sockfd,(SA*)&sockaddr,sizeof(sockaddr))) < 0)
{
//连接服务端失败
}
5. 阻塞式读取数据(暂不考虑超时处理)
int n = 0;
while((n = read(sockfd,buff,BUFF_SIZE) > 0)
{
buff[BUFF_SIZE] = 0;
//处理自己的业务
1. 必需包含的头文件
#include<sys/types.h>
#include<sys/un.h>
#include<netinet/in.h>
//如果要用到linux下面的socket函数,包含
#include<sys/socket.h>
//要用到bzero包含
#include<strings.h>
//要用到输入输入,包含
#include<stdio.h>
2. 注意区分struct sockaddr结构与struct sockaddr_in结构
struct sockaddr为通用,但以上两者在定义时做了补齐处理,
两者可以互相转换
3. 创建本地套接字
int sockfd;
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd <0)
{
//创建本地套接字出错
}
4. 连接服务端
struct sockaddr_in servaddr;
bzero(servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(2501); //转换本地字节序为网络字节序,端口为2501
if(inet_pton(AF_INET,"192.168.1.100",&servaddr.sin_addr) <= 0)
{
//转换地址出错
}
#define BUFF_SIZE 256
typedef struct sockaddr SA;
char buff[BUFF_SIZE+1];
//因connect参数为struct sockaddr结构,要将struct sockaddr_in转化为struct sockaddr结构,
//不然有警告错误
if(connect(sockfd,(SA*)&sockaddr,sizeof(sockaddr))) < 0)
{
//连接服务端失败
}
5. 阻塞式读取数据(暂不考虑超时处理)
int n = 0;
while((n = read(sockfd,buff,BUFF_SIZE) > 0)
{
buff[BUFF_SIZE] = 0;
//处理自己的业务
}
UNIX网络编程TCP服务端步骤(在linux环境下)
1、2两点同客户端编程
3. 创建监听套接字
int listenfd;
listenfd = socket(AF_INET,SOCK_STREAM,0);
if(listenfd <0)
{
//创建监听套接字出错
}
4. 绑定本地监听端口
struct sockaddr_in servaddr;
bzero(servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(2501); //转换本地字节序为网络字节序,监听端口为2501
servaddr.sin_addr.s_addr = htonl(INADDR_ANY); //监听本机所有网卡进来的连接
bind(listenfd,(SA*)&servaddr,sizeof(servaddr));
5. 开始监听
listen(listenfd,5); //连接队列缓存5个连接
6. 接收到来的连接(此处考虑同步接收)
int connfd;
for( ; ; )
{
connfd = accept(listenfd,NULL,NULL);
//可以另外开启线程,或采取异步的方法,在connfd上收发数据了
}