我正在使用winsock控件在C#中創建客戶端/服務器應用程序。我做了所有事情,但我堅持從客戶端發送數據到服務器的地方。在我的程序服務器上總是使用IP和端口監聽客戶端。我將數據從客戶端發送到服務器。c中的Winsock服務器/客戶端應用程序#
1)當單擊服務器窗體上的偵聽按鈕時,它將打開客戶端連接的服務器。
2)在Client form 1st中,單擊服務器連接的連接按鈕爲此消息發送消息(Connect Event:ip),我們很容易知道客戶端已連接到服務器。
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 - 您需要顯示客戶端代碼才能解決問題! –