小编pan*_*ter的帖子

C unix socket编程,connect()挂在无效的主机名上

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)

c sockets network-programming connect hang

5
推荐指数
1
解决办法
3667
查看次数

C++ select()不等待超时时间

我正在尝试使用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)

c++ select synchronization network-programming

4
推荐指数
1
解决办法
1万
查看次数

连接一个字符串然后使用="concatenated string"执行字符串语句

我正在尝试创建一个字符串,然后执行它.我的意思是,将'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

excel excel-formula

2
推荐指数
1
解决办法
2万
查看次数

C unix socket编程read()问题

我正在使用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.

注意:我的目标是成功实现第一个代码段,因此我可以确保我正在读取所有字节,但我无法正确实现它.

c sockets network-programming

0
推荐指数
1
解决办法
3537
查看次数