tcp

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


#define MYPORT 6666 //1024以下的是保留的端口号,用大于1024的;

#define MYADDR "192.168.1.102"

//服务器

int main()
{
int ret = 0;
int socketfd = 0; //局部变量保存在栈空间,而栈空间是脏的==》里面还是保存的是上一次这个区域里面保存的值;
int clientfd = 0;

struct sockaddr_in sock_server = {0};   //变量类型保存在netinet/in.h里面的;
struct sockaddr_in sock_client = {0}; //保存连接的客户端那边的信息;

socklen_t len = sizeof(struct sockaddr);

//第一步:创建套接字;
socketfd = socket(AF_INET,SOCK_STREAM,0);
if(socketfd == -1)
{
perror("socket");
// printf("socket error!\n");
return -1;
}
printf("socket success...\n"); //确保前面的代码是运行正确的;

//第二步:给套接字绑定必要的信息;
sock_server.sin_family = AF_INET; //给服务程序绑定地址族;
sock_server.sin_port = htons(MYPORT); //给服务器程序设定个端口号;
sock_server.sin_addr.s_addr = inet_addr(MYADDR);//给服务程序绑定IP地址;

ret = bind(socketfd,(struct sockaddr *)&sock_server,sizeof(struct sockaddr));
if(ret == -1)
{
perror("bind");
return -1;
}
printf("bind success..\n");

ret = listen(socketfd,10);
if(ret == -1)
{
perror("listen");
return -1;
}
printf("listen success...\n");

clientfd = accept(socketfd,(struct sockaddr *)&sock_client,&len);
if(clientfd == -1)
{
perror("accept");
return -1;
}
printf("accept success...clinet fd = %d\n",clientfd);

char recvbuff[20] = {0};
int recvcnt = 0;

printf("sizeof(struct sockaddr) = %d\n",sizeof(struct sockaddr));
printf("sizeof(struct sockaddr_in) = %d\n",sizeof(struct sockaddr_in));
while(1)
{
// printf("strlen(recvbuff) = %d\n",strlen(recvbuff));
bzero(recvbuff,sizeof(recvbuff));

// recvcnt = recv(clientfd,recvbuff,sizeof(recvbuff),0);
recvcnt = read(clientfd,recvbuff,sizeof(recvbuff));
if(recvcnt == -1)
{
perror("recv");
return -1;
}
else
{
printf("Recv from Client %d bytes,data:%s\n",recvcnt,recvbuff);
}
if(strcmp(recvbuff,"end") == 0)
{
close(clientfd);
close(socketfd);
break;
}
}

return 0;
}


//服务器

int main()
{
int socketfd = 0;
int ret = 0;

struct sockaddr_in sock_server = {0};

socketfd = socket(AF_INET,SOCK_STREAM,0);
if(-1 == socketfd)
{
perror("socket");
return -1;
}
printf("socket success...\n");

//用sock_server提醒你们这边连接的是服务器端的IP地址和端口号;
sock_server.sin_family = AF_INET;
sock_server.sin_port = htons(MYPORT);
sock_server.sin_addr.s_addr = inet_addr(MYADDR);
ret = connect(socketfd,(struct sockaddr *)&sock_server,sizeof(struct sockaddr));
if(ret == -1)
{
perror("connect");
return -1;
}

char sendbuff[20] = {0};
int sendcnt = 0;

while(1)
{
//第一步:提示客户输入要发送的数据;
printf("Please input a string:\n");
scanf("%s",sendbuff);

//第二步:调用send向套接字发送数据;
// sendcnt = send(socketfd,sendbuff,strlen(sendbuff),0);
sendcnt = write(socketfd,sendbuff,strlen(sendbuff));
if(sendcnt == -1)
{
perror("send");
return -1;
}
else
{
printf("Send to Server %d bytes,data:%s\n",sendcnt,sendbuff);
}
//第三步:判断发送的数据是否是end,如果是,就结束;
if(strcmp(sendbuff,"end") == 0)
{
close(socketfd);
break;
}
}

return 0;
}

标题基于SpringBoot+Vue的学生交流互助平台研究AI更换标题第1章引言介绍学生交流互助平台的研究背景、意义、现状、方法与创新点。1.1研究背景与意义分析学生交流互助平台在当前教育环境下的需求及其重要性。1.2国内外研究现状综述国内外在学生交流互助平台方面的研究进展与实践应用。1.3研究方法与创新点概述本研究采用的方法论、技术路线及预期的创新成果。第2章相关理论阐述SpringBoot与Vue框架的理论基础及在学生交流互助平台中的应用。2.1SpringBoot框架概述介绍SpringBoot框架的核心思想、特点及优势。2.2Vue框架概述阐述Vue框架的基本原理、组件化开发思想及与前端的交互机制。2.3SpringBoot与Vue的整合应用探讨SpringBoot与Vue在学生交流互助平台中的整合方式及优势。第3章平台需求分析深入分析学生交流互助平台的功能需求、非功能需求及用户体验要求。3.1功能需求分析详细阐述平台的各项功能需求,如用户管理、信息交流、互助学习等。3.2非功能需求分析对平台的性能、安全性、可扩展性等非功能需求进行分析。3.3用户体验要求从用户角度出发,提出平台在易用性、美观性等方面的要求。第4章平台设计与实现具体描述学生交流互助平台的架构设计、功能实现及前后端交互细节。4.1平台架构设计给出平台的整体架构设计,包括前后端分离、微服务架构等思想的应用。4.2功能模块实现详细阐述各个功能模块的实现过程,如用户登录注册、信息发布与查看、在线交流等。4.3前后端交互细节介绍前后端数据交互的方式、接口设计及数据传输过程中的安全问题。第5章平台测试与优化对平台进行全面的测试,发现并解决潜在问题,同时进行优化以提高性能。5.1测试环境与方案介绍测试环境的搭建及所采用的测试方案,包括单元测试、集成测试等。5.2测试结果分析对测试结果进行详细分析,找出问题的根源并
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值