connect
当我传递无效的主机名时,我遇到了问题的悬而未决的问题.
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#define ERROR_NUM -1
#define BUFFER_SIZE 500
#define HOST_NAME_SIZE 255
#define MY_ID 5
int main(int argc, char* argv[])
{
int hSocket; /* handle to socket */
struct hostent* pHostInfo; /* holds info about a machine */
struct sockaddr_in Address; /* Internet socket address stuct */
long nHostAddress;
char pBuffer[BUFFER_SIZE];
char userName[BUFFER_SIZE];
char hostName[HOST_NAME_SIZE];
if(argc < 2){
printf("\nUsage: username@hostname\n");
return 0;
}
else{
int …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用select函数接受输入,但如果用户没有输入任何内容,则每2秒执行一次其他操作.下面的代码在第一次到达select()时等待两秒钟,但是一旦它打印出第一个"超时"消息,它就会快速打印出"超时"而不等待2秒,基本上进入无限循环.谁知道问题是什么?谢谢你的帮助.
#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
using namespace std;
const int STDIN = 0;
int main(int argc, int *argv[])
{
struct timeval tv;
fd_set readfds, master;
tv.tv_sec = 2;
tv.tv_usec = 0;
FD_ZERO(&readfds);
FD_ZERO(&master);
FD_SET(STDIN, &readfds);
FD_SET(STDIN, &master);
string buffer = "";
while(buffer != "quit"){
readfds = master;
if(select(STDIN+1, &readfds, NULL, NULL, &tv) == -1) perror("select");
if (FD_ISSET(STDIN, &readfds)){
getline(cin, buffer);
cout << "You entered: " << buffer << endl;
}else
cout << "Timed out.\n" << endl; …
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个字符串,然后执行它.我的意思是,将'A'和'20'连接起来,然后在该单元格中获得A20的值.
例子:
="A" & "20" -> doesn't work
=(CONCATENATE("A", "20")) -> doesn't work
Run Code Online (Sandbox Code Playgroud)
excel中是否有执行功能?例
=EXECUTE("string value")
Run Code Online (Sandbox Code Playgroud)
所以我可以创建一个字符串,它会执行类似于我输入的=string
值
我正在使用C来实现客户端服务器应用程序.客户端将信息发送到服务器,服务器使用它来发回信息.我目前正在编写代码来处理数据接收,以确保所有数据都被接收.
在显示一些代码后,我最好解释了我遇到的问题:
int totalRead = 0;
char *pos = pBuffer;
while(totalRead < 6){
if(int byteCount = read(hSocket, pos, BUFFER_SIZE - (pos-pBuffer)>0)){
printf("Read %d bytes from client\n", byteCount);
pos += byteCount;
totalRead += byteCount;
}else return -1;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码在服务器端运行,将打印出"从客户端读取1个字节"6次,程序将继续正常工作.我在这里硬编码6知道我从客户端写了6个字节,但我会让我的协议要求发送的第一个字节是缓冲区其余部分的长度.
int byteCount = read(hSocket, pBuffer, BUFFER_SIZE);
printf("Read %d bytes from client", byteCount);
Run Code Online (Sandbox Code Playgroud)
用于代替第一个代码段的上述代码将打印"从客户端读取6个字节"并继续正常工作,但如果仅读取5个字节,则不保证我已收到每个字节.
谁能向我解释为什么会发生这种情况并提供可能的解决方案?我想第一种方法确保所有字节都被传递但是一次读取一个字节似乎效率低......
哦,这是在一个分叉的子进程中发生的,我正在使用tcp/ip.
注意:我的目标是成功实现第一个代码段,因此我可以确保我正在读取所有字节,但我无法正确实现它.