新手请教一个socket问题

Schengshuo Schengshuo 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
问题:客户端发送一次数据后,第二次服务端接收不了啦,只能接收一次是为什么





服务端代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>


int main()
{
int sfd, cfd;
struct sockaddr_in server_addr;
char buff[10];

//创建套接字
if( (sfd=socket(AF_INET, SOCK_STREAM, 0))<0 ){
perror("create socket error!");
exit(0);
}

memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8888);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY); //通配符地址

//防止服务器关闭后需要等待TIME_WAIT状态才能才继续使用address
int on=1;
if ( setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on))<0 ){
perror("set socket opt fail!\n");
exit(0);
}
//绑定套接字
if( bind(sfd, (struct sockaddr *)&server_addr, sizeof(server_addr))==-1 ){
perror("bind has error!\n");
exit(0);
}

//监听套接字
if( listen(sfd, 10)==-1 ) {
perror("listen has error!\n");
exit(0);
}

//接收客户端
while(1){
puts("waitting for client on 888");
if( (cfd = accept(sfd, (struct sockaddr *)NULL, NULL)) > -1 ) {
printf("new socket fd:%d\n", cfd);
}

int n;
if( (n = recv(cfd, buff, strlen(buff), 0)) < 0 ) {
puts("recv data fail\n");
exit(0);
}
buff[n] = '\0';
printf("recv msg from client: %s\n", buff);
puts(buff);
close(cfd);
}

//关闭close();
close(sfd);

return 0;
}


客户端代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>

int main()
{
int cfd;
struct sockaddr_in server_addr;
char buff[10];

//创建socket
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8888);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

cfd = socket(AF_INET, SOCK_STREAM, 0);
if( cfd<0 ) {
perror("create socket error\n!");
exit(0);
}

//连接
if( connect(cfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) ==-1 ){
perror("connect has error!\n");
exit(1);
}
printf("connect with destination host...\n");

while(1){
memset(buff, 0, strlen(buff));
scanf("%s", buff);
send(cfd, buff, strlen(buff), 0);
}


//关闭close();
close(cfd);
}
...全文

相关推荐

评论 1
收藏 已收藏
分享
返回顶部
Schengshuo
C语言 70,040 成员 243,237 内容