bzero(name,20); age = 0; score = 0; sscanf(buf,"%s %d %f",name,&age,&score); printf("%s %d %.2f\n",name,age,score);
时间: 2024-04-25 14:27:49 浏览: 54
这段代码的作用是将之前定义的变量name、age和score清零(或赋值为0),然后使用sscanf函数将之前格式化好的字符串buf中的内容按照指定的格式读取到name、age、score变量中,最后使用printf函数再将它们输出到控制台。这个过程的目的是为了验证sprintf和sscanf函数的正确性,同时也是为了演示将字符串转化为不同类型的变量。
相关问题
int main(int argc, char *argv[]) { char recv_buf[2048] = ""; // 接收缓冲区 int sockfd = 0; // 套接字 int connfd = 0; int err_log = 0; struct sockaddr_in my_addr; // 服务器地址结构体 unsigned short port = 8000; // 监听端口 if(argc > 1) // 由参数接收端口 { port = atoi(argv[1]); } printf("TCP Server Started at port %d!\n", port); sockfd = socket(AF_INET, SOCK_STREAM, 0); // 创建TCP套接字 if(sockfd < 0) { perror("socket"); exit(-1); } bzero(&my_addr, sizeof(my_addr)); // 初始化服务器地址 my_addr.sin_family = AF_INET; my_addr.sin_port = htons(port); my_addr.sin_addr.s_addr = htonl(INADDR_ANY); printf("Binding server to port %d\n", port); err_log = bind(sockfd, (struct sockaddr*)&my_addr, sizeof(my_addr)); if( err_log != 0) { perror("binding"); close(sockfd); exit(-1); } err_log = listen(sockfd, 10); if(err_log != 0) { perror("listen"); close(sockfd); exit(-1); } printf("Waiting client...\n"); while(1) { size_t recv_len = 0; struct sockaddr_in client_addr; // 用于保存客户端地址 char cli_ip[INET_ADDRSTRLEN] = ""; // 用于保存客户端IP地址 socklen_t cliaddr_len = sizeof(client_addr); // 必须初始化!!! connfd = accept(sockfd, (struct sockaddr*)&client_addr, &cliaddr_len); // 获得一个已经建立的连接 if(connfd < 0) { perror("accept"); continue; } inet_ntop(AF_INET, &client_addr.sin_addr, cli_ip, INET_ADDRSTRLEN); printf("client ip = %s\n", cli_ip); while((recv_len = recv(connfd, recv_buf, sizeof(recv_buf), 0)) > 0) { send(connfd, recv_buf, recv_len, 0); } close(connfd); //关闭已连接套接字 printf("client closed!\n"); } //6.与客户端通信 char buff[128] = {0}; read(acceptfd, buff, 128); printf("%s-%d:[%s]\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port), buff); strcat(buff, "--hqyj"); write(acceptfd, buff, 128); close(sockfd); //关闭监听套接字 return 0; }
这是一段使用 C 语言编写的 TCP 服务器程序,它可以监听指定端口的连接请求,并接收客户端发送的数据,并将接收到的数据返回给客户端。程序中使用了 socket() 函数创建了一个 TCP 套接字,然后使用 bind() 函数将服务器地址绑定到套接字上,并使用 listen() 函数开始监听客户端连接请求。程序使用 accept() 函数接收客户端连接,并在接收到连接后使用 recv() 函数接收客户端发送的数据,并使用 send() 函数将接收到的数据返回给客户端。程序在循环中不断接收客户端连接请求,并与客户端进行通信,直到程序被手动终止。
#include <sys/types.h> #include<sys/socket.h> #include<stdio.h> #include<string.h> #include<netinet/in.h> #include <unistd.h> #include <stdlib.h> #include <pthread.h> #define PORT 6000; #define SERVER_IP "192.168.40.128" void *routine(void * arg) { int newsockfd=(int *)&arg; char buf[10]; while(1) { bzero(buf,10); int size=recv(newsockfd,buf,sizeof(buf),0); buf[size]='\0'; printf("recive from client is : %s",buf); } } int main() { char buf[10]="hello"; int sockfd=socket(AF_INET,SOCK_STREAM,0); if(sockfd<0) { perror("socket fail\n"); return -1; } //Set Sockopt int sinsize = 1; int ret = setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &sinsize, sizeof(int)); if(ret != 0) { perror("Set sockopt fail!\n"); exit -1; } struct sockaddr_in s; memset(&s,0,sizeof(s)); s.sin_family=AF_INET; s.sin_port=htons(6000); s.sin_addr.s_addr=inet_addr("192.168.40.128");// 要 求 大 端模式的端口号和 IP 地址 int bi=bind(sockfd,(struct sockaddr *)&s,sizeof(struct sockaddr)); if(bi<0) { perror("bind fail\n"); } listen(sockfd,5); struct sockaddr_in c; int size=sizeof(struct sockaddr); int newsockfd=accept(sockfd,(struct sockaddr *)&c,&size); /********************************** 创 建 线 程 ********************************************/ pthread_t pid; pthread_create(&pid,NULL,routine,(void *)socket); while(1) { memset(buf,0,10); fgets(buf,10,stdin); int slen=send(newsockfd,buf,strlen(buf),0); if(slen<0) { printf("send failed\n"); return -1; } } pthread_join(pid,NULL); close(newsockfd); close(sockfd); return 0; }
这段代码存在一些错误。首先,在 `#define PORT 6000;` 中应该去掉分号,否则会导致端口号变成 6001。其次,在 `exit -1;` 中应该使用括号,即 `exit(-1);`。最后,在创建线程时,应该将 `socket` 改成 `newsockfd`,即 `pthread_create(&pid,NULL,routine,(void *)newsockfd);`。修改后的代码如下:
```c
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <string.h>
#include <netinet/in.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#define PORT 6000
#define SERVER_IP "192.168.40.128"
void *routine(void *arg)
{
int newsockfd = *(int *)arg;
char buf[10];
while(1)
{
bzero(buf, 10);
int size = recv(newsockfd, buf, sizeof(buf), 0);
buf[size] = '\0';
printf("recive from client is : %s", buf);
}
}
int main()
{
char buf[10] = "hello";
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd < 0)
{
perror("socket fail\n");
return -1;
}
// Set Sockopt
int sinsize = 1;
int ret = setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &sinsize, sizeof(int));
if(ret != 0)
{
perror("Set sockopt fail!\n");
exit(-1);
}
struct sockaddr_in s;
memset(&s, 0, sizeof(s));
s.sin_family = AF_INET;
s.sin_port = htons(PORT);
s.sin_addr.s_addr = inet_addr(SERVER_IP);
int bi = bind(sockfd, (struct sockaddr *)&s, sizeof(struct sockaddr));
if(bi < 0)
{
perror("bind fail\n");
return -1;
}
listen(sockfd, 5);
struct sockaddr_in c;
int size = sizeof(struct sockaddr);
int newsockfd = accept(sockfd, (struct sockaddr *)&c, &size);
/********************************** 创建线程 ********************************************/
pthread_t pid;
pthread_create(&pid, NULL, routine, (void *)&newsockfd);
while(1)
{
memset(buf, 0, 10);
fgets(buf, 10, stdin);
int slen = send(newsockfd, buf, strlen(buf), 0);
if(slen < 0)
{
printf("send failed\n");
return -1;
}
}
pthread_join(pid, NULL);
close(newsockfd);
close(sockfd);
return 0;
}
```
阅读全文