Linux 网络编程 <1>

本文介绍了一个使用Cygwin在Windows 2003环境下实现的简单网络编程案例,包括服务端与客户端的代码实现。服务端监听并响应客户端的时间请求,返回当前时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境
Cygwin+windows2003

说明:

服务端(Server)

#include <sys/types.h>
#include <sys/socket.h>
#include <time.h>
#include <netinet/in.h>
#include <stddef.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>

int main(int argc,char **argv ){
int listenfd,connectfd;
struct sockaddr_in servaddr;
char buffer[4096];
time_t ticks;
listenfd=socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);//转换成网络字符顺序
servaddr.sin_port=htons(13);//转换成网络字符顺序
bind(listenfd,(struct sockaddr *) &servaddr,sizeof(servaddr));
listen(listenfd,1024);
for (;;) {
connectfd=accept(listenfd,(struct sockaddr *)NULL,NULL);
ticks=time(NULL);
snprintf(buffer,sizeof(buffer),"-------%.24s----------",ctime(&ticks));
write(connectfd,buffer,strlen(buffer));

close(connectfd);

}
}


客户端(Client)
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
void birdprint(char *value,...){
printf("\r\nvalue=%s",value);
}

int main(int argc, char **argv)
{
argv[1]="127.0.0.1";
birdprint("------开始run------");
int sockfd, n;
char recvline[4096 + 1];
struct sockaddr_in servaddr;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(13); /* daytime server */
inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr));
while ( (n = read(sockfd, recvline, 4096)) > 0) {
recvline[n] = 0; /* null terminate */
if (fputs(recvline, stdout) == EOF){
}
}

birdprint("------结束run------");
exit(0);
}


//注意如下转换
struct sockaddr_in servaddr;
(struct sockaddr *) &servaddr


struct sockaddr
{
unsigned short int sa_family;
char sa_data[14];
};

struct socketaddr_in
{
unsigned short int sin_family;
uint16_t sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[8];
};
struct in_addr
{
uint32_t s_addr;
};

char array4w[2][3][4][5];
int i,j,k,l;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
for(k=0;k<4;k++)
for(l=0;l<4;l++)
array4w[i][j][k][l]=i*12+j*4+k+l;


[2][3][4][5]


{
{
{
0_0_0_0
0_0_0_1
0_0_0_2
0_0_0_3
0_0_0_4
},
{
0_0_1_0
0_0_1_1
0_0_1_2
0_0_1_3
0_0_1_4
},
{
0_0_2_0
0_0_2_1
0_0_2_2
0_0_2_3
0_0_2_4
},
{
0_0_3_0
0_0_3_1
0_0_3_2
0_0_3_3
0_0_3_4
}
},
{
{
0_1_0_0
0_1_0_1
0_1_0_2
0_1_0_3
0_1_0_4
},
{
0_1_1_0
0_1_1_1
0_1_1_2
0_1_1_3
0_1_1_4
},
{
0_1_2_0
0_1_2_1
0_1_2_2
0_1_2_3
0_1_2_4
},
{
0_1_3_0
0_1_3_1
0_1_3_2
0_1_3_3
0_1_3_4
}

},

{
{
0_2_0_0
0_2_0_1
0_2_0_2
0_2_0_3
0_2_0_4
},
{
0_2_1_0
0_2_1_1
0_2_1_2
0_2_1_3
0_2_1_4
},
{
0_2_2_0
0_2_2_1
0_2_2_2
0_2_2_3
0_2_2_4
},
{
0_2_3_0
0_2_3_1
0_2_3_2
0_2_3_3
0_2_3_4
}
}
},
{

{
{
1_0_0_0
1_0_0_1
1_0_0_2
1_0_0_3
1_0_0_4
},
{
1_0_1_0
1_0_1_1
1_0_1_2
1_0_1_3
1_0_1_4
},
{
1_0_2_0
1_0_2_1
1_0_2_2
1_0_2_3
1_0_2_4
},
{
1_0_3_0
1_0_3_1
1_0_3_2
1_0_3_3
1_0_3_4
}
},
{
{
1_1_0_0
1_1_0_1
1_1_0_2
1_1_0_3
1_1_0_4
},
{
1_1_1_0
1_1_1_1
1_1_1_2
1_1_1_3
1_1_1_4
},
{
1_1_2_0
1_1_2_1
1_1_2_2
1_1_2_3
1_1_2_4
},
{
1_1_3_0
1_1_3_1
1_1_3_2
1_1_3_3
1_1_3_4
}
},
{
{
1_2_0_0
1_2_0_1
1_2_0_2
1_2_0_3
1_2_0_4
},
{
1_2_1_0
1_2_1_1
1_2_1_2
1_2_1_3
1_2_1_4
},
{
1_2_2_0
1_2_2_1
1_2_2_2
1_2_2_3
1_2_2_4
},
{
1_2_3_0
1_2_3_1
1_2_3_2
1_2_3_3
1_2_3_4
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值