Socket Programmierung zwischen client im C#.NET und server in C
Hier würde ich mag zu Fragen, wie schaffen die Kommunikation über socket-Programmierung zwischen client (unter Windows, mit C#.NET) und-server (auf Ubuntu, mit C).
Habe ich getan, erfolgreich, wenn die server-client-beide sind entweder C#.NET oder C, aber keine Ahnung haben, zu tun, was ich fragte.
Ich habe versucht zu finden, Informationen in mehreren Orten, aber nicht finden konnten, die genau einen.
Ich Schätze alle Kommentare. Danke.
Ist hier einfach die codes auf den client.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
namespace WindowsFormsApplication9
{
public partial class Form1 : Form
{
//Receiving byte array
byte[] bytes = new byte[1024];
Socket senderSock;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void btn_connect_Click(object sender, EventArgs e)
{
try
{
//Create one SocketPermission for socket access restrictions
SocketPermission permission = new SocketPermission(
NetworkAccess.Connect, //Connection permission
TransportType.Tcp, //Defines transport types
"", //Gets the IP addresses
SocketPermission.AllPorts //All ports
);
//Ensures the code to have permission to access a Socket
permission.Demand();
//Resolves a host name to an IPHostEntry instance
IPHostEntry ipHost = Dns.GetHostEntry("");
//Gets first IP address associated with a localhost
IPAddress ipAddr = ipHost.AddressList[0];
//Creates a network endpoint
IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 4510);
//Create one Socket object to setup Tcp connection
senderSock = new Socket(
ipAddr.AddressFamily,//Specifies the addressing scheme
SocketType.Stream, //The type of socket
ProtocolType.Tcp //Specifies the protocols
);
senderSock.NoDelay = false; //Using the Nagle algorithm
//Establishes a connection to a remote host
senderSock.Connect(ipEndPoint);
}
catch (Exception exc) { MessageBox.Show(exc.ToString()); }
}
private void btnSend_Click(object sender, EventArgs e)
{
try
{
//Sending message
//<Client Quit> is the sign for end of data
string theMessageToSend = text_IP.Text;
byte[] msg = Encoding.Unicode.GetBytes(theMessageToSend + "<Client Quit>");
//Sends data to a connected Socket.
int bytesSend = senderSock.Send(msg);
}
catch (Exception exc) { MessageBox.Show(exc.ToString()); }
}
}
}
dies ist die codes in einem server (in C)
include "stdio.h"
#include "stdlib.h"
#include "sys/socket.h"
#include "sys/types.h"
#include "netinet/in.h"
#include "error.h"
#include "strings.h"
#include "unistd.h"
#include "arpa/inet.h"
#define ERROR -1
#define MAX_CLIENTS
#define MAX_DATA 1024
main(int argc, char **argv)
{
struct sockaddr_in server;
struct sockaddr_in client;
int sock;
int new,i;
int sockaddr_len = sizeof(struct sockaddr_in);
printf("sockaddr_len");
int data_len;
char data[MAX_DATA];
char temp[MAX_DATA];
if((sock = socket(AF_INET, SOCK_STREAM, 0)) == ERROR)
{
perror("server socket: ");
exit(-1);
}
server.sin_family = AF_INET;
server.sin_port = htons(atoi(argv[1]));
server.sin_addr.s_addr = INADDR_ANY;
bzero(&server.sin_zero, 8);
if((bind(sock, (struct sockaddr *)&server, sockaddr_len)) == ERROR)
{
perror("bind : ");
exit(-1);
}
if((listen(sock, MAX_CLIENTS)) == ERROR)
{
perror("listen");
exit(-1);
}
printf("\nThe TCPServer Waiting for client on port %d\n",ntohs(server.sin_port));
fflush(stdout);
while(1) //Better signal handling required
{
if((new = accept(sock, (struct sockaddr *)&client, &sockaddr_len)) == ERROR)
{
perror("accept");
exit(-1);
}
printf("New Client connected from port no %d and IP %s\n", ntohs(client.sin_port), inet_ntoa(client.sin_addr));
data_len = 1;
while(data_len)
{
data_len = recv(new, data, MAX_DATA, 0);
printf("\nRecieved mesg from client: %s", data);
for( i = 0; data[ i ]; i++)
{
/* if(data[i]=='a' || data[i]=='e' || data[i]=='i' ||data[i]=='o' || data[i]=='u' )
data[ i ] = toupper( data[ i ] );
else */
data[ i ] = data[ i ] ;
}
if(data_len)
{
send(new, data, data_len, 0);
data[data_len] = '\0';
printf("\nSent mesg to client: %s", data);
}
}
printf("Client disconnected\n");
close(new);
}
close(sock);
}
- Gibt es irgendein Grund, warum Sie Zweifel Ihre socket-code in C/C# korrekt funktionieren würde schlagen Sie Ihre client/server in C#/C? Wenn dem so ist, wie auf der Erde können wir wissen, die Wurzel, die Zweifels ohne zu sehen-code ?
- sorry, ich habe vergessen Sie es. Ich bearbeitet habe, und die angeschlossenen client-code. für den server-code, ich habe in der Tat haben Sie ein Beispiel-Programm, aber es funktioniert nicht mit diesem client-codes. Der client-code ist das arbeiten mit den server-codes in C#.NET obwohl.
- Können Sie uns bitte sagen, in welcher Weise es funktioniert nicht? Können Sie eine Verbindung zum server herstellen? Tun, bekommen Sie eine Fehlermeldung/exception? In den client-code, den Sie anrufen GetHostEntry mit leerem Hostnamen. Haben Sie dort den Hostnamen des Servers während der Testphase?
- Ich konnte nicht mit server verbinden..KEINE Antwort vom server.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Buchse universelles Konzept und nicht auf eine bestimmte Sprache.
Sie können gehen Sie voran und verwenden Sie die gleichen C Ubuntu-Server-code und C# - Windows-Client-code.
Paar Dinge, die Sie brauchen zu kümmern sind :
Hoffe, Sie können kick-start mit diesen Eingängen
Happy Coding 🙂
So, ich bin-vorausgesetzt, Ihre Kunden können wenigstens miteinander reden. Aber es sieht aus wie Ihre Problem ist, dass Sie senden Ihren text in das Unicode-format von C# und dann erhalten Sie als ASCII-Datei auf der client-Seite. Es sei denn, der Verzug ist nicht ASCII für Ihre 'C' client.
In Ihrem Client-Code, den Sie Sie nennen
GetHostEntry
mit leerem Hostnamen. Dies wird geben Sie die IP-Adresse Ihres Clients.Sollten Sie rufen
GetHostEntry
mit dem host-Namen des server: