gpt4 book ai didi

c# - 将 C 套接字客户端连接到 C# 套接字服务器

转载 作者:行者123 更新时间:2023-11-30 16:00:48 26 4
gpt4 key购买 nike

我对 C 和 C# 语言都很陌生,如果您能就以下问题获得任何帮助/反馈,我将不胜感激。

基本上,我尝试用不同的编程语言建立套接字连接。客户端是用C语言开发的,服务器端是用C#开发的。仅当我使用相同的编程语言进行测试时,这两个应用程序才能正常工作,例如,如果服务器使用 C 语言,则客户端可以正常工作。服务器端也可以使用 C# 语言。每当 client.c 尝试连​​接时遇到的错误是“连接被拒绝”,当在代码中获取此行时

if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) 
error("ERROR connecting");

这是两个套接字端的代码。

客户端.c

/* Client socket demo */
int sockfd, n;
struct sockaddr_in serv_addr;
struct hostent *server;

char buffer[256];
char hostname[1024];
//hostname[1023] = '\0';
struct hostent* h;
gethostname(hostname, sizeof(hostname));
//printf("Hostname: %s\n", hostname);

server = gethostbyname(hostname);
//printf("h_name: %s\n", h->h_name);

//portno = atoi(argv[2]);
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
//server = gethostbyname(argv[1]);
if (server == NULL) {
fprintf(stderr,"ERROR, no such host\n");
exit(0);
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET; // only IPv4
memcpy(&serv_addr.sin_addr, server->h_addr, server->h_length); // fixed part
bcopy((char *)server->h_addr,(char *)&serv_addr.sin_addr.s_addr,server->h_length);
serv_addr.sin_port = htons(SERVERPORT); // htons((u_short)port); .sin_addr.S_un.S_addr = htonl(INADDR_ANY)
//serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0)
error("ERROR connecting");
printf("Please enter the message: ");
bzero(buffer,256);
fgets(buffer,255,stdin);
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,256);
n = read(sockfd,buffer,255);
if (n < 0)
error("ERROR reading from socket");
printf("here we are %s\n",buffer);
close(sockfd);

服务器.cs

void ButtonStartListenClick(object sender, System.EventArgs e)
{
try
{
// Check the port value
if(textBoxPort.Text == "")
{
MessageBox.Show("Please enter a Port Number");
return;
}
string portStr = textBoxPort.Text;
int port = System.Convert.ToInt32(portStr);

// Create the listening socket...
m_mainSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);

IPEndPoint ipLocal = new IPEndPoint (IPAddress.Any, port);

// Bind to local IP Address...
m_mainSocket.Bind( ipLocal );

// Start listening...
m_mainSocket.Listen(4);

// Create the call back for any client connections...
m_mainSocket.BeginAccept(new AsyncCallback (OnClientConnect), null);

UpdateControls(true);

}
catch(SocketException se)
{
MessageBox.Show ( se.Message );
}

}

最佳答案

语言并不重要。诚实:)

如果您从两台独立的 PC 运行这些程序,首先要检查的是您的防火墙。

建议:

  1. 获取特定客户端(例如您的 C 客户端)可以连接到特定服务器(例如您的 C 服务器)的场景。

  2. 相同 .exe 复制到出现问题的电脑,然后重试。

  3. 确保不同的 .exe 使用相同端口号。

  4. 您可能还对获取 Wireshark 感兴趣,这样您就可以跟踪来回的数据包(特别是客户端发出尝试连接的 TCP“SYN”数据包):

    http://www.wireshark.org

“希望有帮助!

关于c# - 将 C 套接字客户端连接到 C# 套接字服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7423212/

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