新手请教一个socket问题
问题:客户端发送一次数据后,第二次服务端接收不了啦,只能接收一次是为什么


服务端代码:
客户端代码:


服务端代码:
#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);
}
...全文
相关推荐
关于socket资料,新手必学
**《VB.NET里文件传输问题》**:可能是一个关于在VB.NET中实现文件传输时遇到的问题及其解决方案的讨论,对于学习者来说,这样的案例分析有助于理解实际开发中可能遇到的挑战及应对策略。4.
一个socket客户端的项目,还附加了一个图形算法
在C#中,System.Net命名空间下的Socket类为我们提供了与服务器进行连接、发送和接收数据的方法。该项目描述中提到“新手一看就懂”,意味着代码应该有良好的注释,便于初学者理解。
ios socket demo
如果对实时性要求高,可以考虑使用UDP,但需要自己处理数据丢失和乱序的问题。3. **创建Socket连接** - 首先,你需要指定一个服务器的IP地址和端口号。
基于Socket 的网络调试助手
基于Socket的网络调试助手,顾名思义,是一个工具,用于帮助开发者检测和诊断Socket通信中的问题。它通常包括以下功能:1.
"SOCKET编程源代码集"是一个关于网络通信的编程资源
总之,"SOCKET编程源代码集"是一个全面了解和掌握网络通信编程的实用资源,涵盖了从基础到进阶的各种示例,无论你是新手还是老手,都能从中受益。


