gpt4 book ai didi

c - 建立 TCP 套接字连接时出现问题

转载 作者:可可西里 更新时间:2023-11-01 02:35:32 28 4
gpt4 key购买 nike

我不是软件专家,但我确实需要一些建议。

我正在编写一个 C 程序(在下面剪切/粘贴)以通过 LAN(以太网)建立从我的 Mac Pro 到位于它旁边的基于 Windows XP 的测试仪器的 TCP 套接字连接。该程序编译时没有任何警告或错误。但是使用 GNU 调试器执行代码,我可以看到它在“exit(2)”处退出,这是“if(connect(MySocket”行。没有超时,它只是立即退出。

我编译使用: gcc -g -Wall talk2me.c -o talk2me但我没有在输出中得到任何提示,也没有在调试时得到任何可能的问题提示。

我确定 10.0.1.100 和端口 5025 是正确的(使用 Matlab 代码我可以使用这些参数进行良好的通信)。知道我还可以在哪里调试吗?

除了代码本身,是否还有任何其他要求(可能是系统级的)需要满足(比如从某个目录运行代码,或者在 unix 中设置一个参数以允许连接等)?由于我是一名硬件专家,所以我可能很明显地错过了一些东西,所以请随意假设我在做一些愚蠢的事情。我可以很好地运行“hello world”程序,这很有帮助。提前致谢,ggk

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/tcp.h>
#include <netinet/in.h>
#include <arpa/inet.h> //for inet_addr
#include <unistd.h> // for function 'close'

int main(void)
{
int MySocket;
if((MySocket=socket(PF_INET,SOCK_STREAM,0))==-1) exit(1);

struct in_addr {
unsigned long s_addr;
};
struct sockaddr_in {
short int sin_family; // Address family
unsigned short int sin_port; // Port number
struct in_addr sin_addr; // Internet address
unsigned char sin_zero[8]; // Padding
};
struct sockaddr_in MyAddress;

// Initialize the whole structure to zero
memset(&MyAddress,0,sizeof(struct sockaddr_in));
// Then set the individual fields
MyAddress.sin_family=PF_INET; // IPv4
MyAddress.sin_port=htons(5025); // Port number used by instrument
MyAddress.sin_addr.s_addr=inet_addr("10.0.1.100"); // IP Address

if(connect(MySocket,(struct sockaddr *) &MyAddress,
sizeof(struct sockaddr_in))==-1) exit(2);

// Send SCPI command
if(send(MySocket,"*IDN?\n",6,0)==-1) exit(3);

// Read response
char buffer[200];
int actual;
if((actual=recv(MySocket,&buffer[0],200,0))==-1) exit(4);
buffer[actual]=0; // Add zero character (C string)
printf("Instrument ID: %s\n",buffer);

// Close socket
if(close(MySocket)==-1) exit(99);

return 0;
}

最佳答案

  1. 您已经在 main 的顶部定义了 struct in_addr 和 struct sockaddr_in。不要那样做,这些是在头文件 (netinet/in.h) 中找到的类型,您必须使用它们,而不是您自己的版本。

  2. 尝试使用 telnet 从您的 mac box 连接到 10.0.1.100 端口 5025,是否有效?

  3. exit(2); 替换为 {perror("connect");退出(2); } 以获得错误的描述。

关于c - 建立 TCP 套接字连接时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3569259/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com