[英]Connecting C socket client to a C# socket server
我是C和C#語言的新手,對於以下問題,我將不勝感激。
基本上,我試圖用不同的編程語言建立套接字連接。 客戶端已使用C開發,服務器已使用C#開發。 只有當我使用相同的編程語言進行測試時,這兩個應用程序才能很好地工作,例如,如果服務器在C中,則客戶端工作良好。相同的服務器在C#中也適用。 每當在代碼中獲取此行時,client.c嘗試連接時遇到的錯誤為“連接被拒絕”
if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0)
error("ERROR connecting");
這是套接字兩端的代碼。
客戶端
/* 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);
server.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上運行它們,那么首先要檢查的是防火牆。
建議:
獲得特定客戶端(例如C客戶端)可以連接到特定服務器(例如C服務器)的方案。
將相同的 .exe復制到遇到問題的PC上,然后重試。
確保不同的.exe使用相同的端口號。
您可能還對獲取Wireshark感興趣,因此您可以跟蹤來回的數據包(特別是客戶端發出的嘗試連接的TCP“ SYN”數據包):
希望有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.