C#でwinsockコントロールを使用してクライアント/サーバーアプリケーションを作成しようとしています。私はそれですべてのことをしましたが、私はクライアントからサーバーにデータを送信する場所を張りました。私のプログラムサーバでは、常にipとportを使ってクライアントを待ち受けます。私はクライアントからサーバーにデータを送信します。C#のWinsockサーバー/クライアントアプリケーション
1)するとき、それは、クライアントが接続しているサーバーを開き、サーバーフォームに聞く]ボタンをクリックしてください。我々はイースリークライアントがサーバに接続されていることを知って、このメッセージのIP):クライアントのフォームの第一で
2)私は、接続されたサーバがメッセージを(connectイベント与えることのための接続ボタンをクリックしてください。
3)その後、我々は、データの送信テキストボックスにいくつかのデータを入力し、サーバにデータを送信し、また、クライアントに保存するボタンを送信]をクリックします。以下は
コード:
SERVER:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Net;
using System.Threading;
using System.Net.Sockets;
namespace Server
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
const string DEFAULT_SERVER = "ip";
const int DEFAULT_PORT = 120;
System.Net.Sockets.Socket serverSocket;
System.Net.Sockets.SocketInformation serverSocketInfo;
public string Startup()
{
IPHostEntry hostInfo = Dns.GetHostByName(DEFAULT_SERVER);
IPAddress serverAddr = hostInfo.AddressList[0];
var serverEndPoint = new IPEndPoint(serverAddr, DEFAULT_PORT);
serverSocket = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);
serverSocket.Bind(serverEndPoint);
return serverSocket.LocalEndPoint.ToString();
}
public string Listen()
{
int backlog = 0;
try
{
serverSocket.Listen(backlog);
return "Server listening";
}
catch (Exception ex)
{
return "Failed to listen" + ex.ToString();
}
}
public string ReceiveData()
{
System.Net.Sockets.Socket receiveSocket;
byte[] buffer = new byte[256];
receiveSocket = serverSocket.Accept();
var bytesrecd = receiveSocket.Receive(buffer);
receiveSocket.Close();
System.Text.Encoding encoding = System.Text.Encoding.UTF8;
return encoding.GetString(buffer);
}
private void Listen_Click(object sender, EventArgs e)
{
string serverInfo = Startup();
textBox1.Text = "Server started at:" + serverInfo;
serverInfo = Listen();
textBox1.Text = serverInfo;
//string datatosend = Console.ReadLine();
//SendData(datatosend);
serverInfo = ReceiveData();
textBox1.Text = serverInfo;
//Console.ReadLine();
}
private void winsock_DataArrival(object sender, AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent e)
{
ReceiveData();
Listen();
}
private void winsock_ConnectEvent(object sender, EventArgs e)
{
Listen();
}
}
}
これは、すべてが完璧に動作しているが、ここで私の問題は、私はデータを一度だけで、サーバーにクライアントを形成してしまうことがあります。私は、そのが動作していないクライアントからサーバにデータを再度送信してくれ
追加情報のようないくつかのメッセージ与えた場合:各ソケットアドレス (プロトコル/ネットワークアドレス/ポート)の唯一の使用が正常に許可されている
をサーバーフォームserverSocket.Bind(serverEndPoint);
で
誰かが私の問題を解決するために私を助けてください。
ありがとうございます。
なぜあなたはreceiveSocket.Closeを呼ぶのですか(); ReceiveData()で??これは問題になる可能性があります。 –
@Mitesh Budhabhatti貴重な命令をいただきありがとうございます。私はその行に//receiveSocket.Close();を命じます。しかし、私は同じ問題を抱えています;-( – Sanjana
@Sanjana - 問題を解決するためにクライアントコードも表示する必要があります –