Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在套接字编程中手动输入IP地址以及如何打印跟踪?_C_Sockets_Server_Client_Client Server - Fatal编程技术网

C 如何在套接字编程中手动输入IP地址以及如何打印跟踪?

C 如何在套接字编程中手动输入IP地址以及如何打印跟踪?,c,sockets,server,client,client-server,C,Sockets,Server,Client,Client Server,我正在做一个项目,在那里我必须做一个程序客户端/服务器,在那里我必须测试连接,发送/接收文件,并列出保存在服务器上的所有文件 我在第一步,我被要求手动输入端口号和IP地址,IP地址声明被阻止 这是我的密码 void connection(){ int port; int sockfd,connfd; struct sockaddr_in servaddr,cli; sockfd=socket(AF_INET,SOCK_STREAM,0); if(sockfd=

我正在做一个项目,在那里我必须做一个程序客户端/服务器,在那里我必须测试连接,发送/接收文件,并列出保存在服务器上的所有文件

我在第一步,我被要求手动输入端口号和IP地址,IP地址声明被阻止

这是我的密码

void connection(){  
    int port;
    int sockfd,connfd;
    struct sockaddr_in servaddr,cli;
    sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd==-1)
{
    printf("socket creation failed...\n");
    exit(0);
}
else
    printf("Socket successfully created..\n");
    printf("Enter Port Number \n");
    scanf("%d",&port);
    bzero(&servaddr,sizeof(servaddr));
    servaddr.sin_family=AF_INET;
    servaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
    servaddr.sin_port=htons(port);
if(connect(sockfd,(SA *)&servaddr,sizeof(servaddr))!=0)
{
    printf("connection with the server failed...\n");
    printf("Program Closed\n");
    exit(0);
}
else
    printf("connected to the server..\n");
    printf("listening from Server\n");
    func(sockfd);
    close(sockfd);}
现在,如果我想声明一个变量,将IP 127.0.0.1放入其中,并在这行servaddr.sin\u addr.s\u addr=inet\u addr中使用它

建立与服务器的连接后,我可以发送和接收消息,但我想显示跟踪帧及其大小(以字节为单位),等等。 有什么想法吗


谢谢

这是一个简单的部分,带有IP变量。您可以使用固定大小为16的字符数组来避免动态内存分配,因为16个字节足以存储具有有效IPv4地址的字符串,例如255.255.255.255-3点+12位+1个空符号终止字符串

读取IP的代码:

char ip[16];
scanf("%15s", ip);
/* if needed it is possible to write some function for validation of
 * enetered string to check that it is valid IP address string: 4 decimal
 * numbers in range 0...255 separated by dots */
/* ... */
servaddr.sin_addr.s_addr = inet_addr(ip);
scanf中的字符串%15s表示我们要读取以null结尾的字符串s,其长度最多应为15个字符+1,因为null不计入该数字

关于帧,首先我认为您希望捕获单独的数据包。然而,现在看来您只需要使用TCP套接字进行常规的客户机-服务器通信,并打印一些关于活动的信息

我们把客户作为一个例子。您已处于连接状态。下一步,您应该准备要发送的数据缓冲区。在发送之前,您可以打印帧的传输

然后你应该为超时做好准备。这就是答案。您可以打印超时1000毫秒的激活

数据发送。此函数返回发送的字节数。所以,如果这个数字与您发送的数据数量相等,就可以打印发送的数据


同样,也可以按照阶段来描述服务器上的读取操作:已连接,也可以通过超时读取,已接收:测试。

帧是什么意思?以太网帧?TCP数据包?IP的变量是什么?您想知道如何从控制台输入IP吗?当我从客户端向服务器发送消息时,它会在控制台上打印消息127.0.0.1:58482:传输帧0 31字节127.0.0.1:58482:激活超时1000ms 127.0.0.1:58482:已接收。在服务器端,它显示127.0.0.1:58482:接收到帧0 4字节的传输127.0.0.1:58482:获取传输帧0 127.0.0.1:58482:接收到命令:测试。我想我们可以使用发送和接收功能来显示这些信息?是的,我用scanf的And integer扫描端口,然后我想用另一个变量为IPThank谢谢你提供的信息,你真的帮了我。IP现在和明天都能工作,我会阅读帖子并尝试做同样的事情:如果我遇到任何问题,我会在这里发布