Witam. Potrzebuję napisać aplikację klient serwer w c# z tym że klient ma byc na Windows Phone 7.1. Problem polega na tym że klient nie chce połączyć się z serwerem
Kod serwera:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
namespace server_App
{
class Program
{
static void Main(string[] args)
{
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Unspecified);
s.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1001));
s.Listen(5);
int counter = 0;
while (true)
{
Console.WriteLine("Waiting for connection...");
Socket cli = s.Accept();
Console.WriteLine("Połączono");
try
{
byte[] buffer = new byte[1024];
int wynik = cli.Receive(buffer);
String time = Encoding.ASCII.GetString(buffer, 0, wynik);
Console.WriteLine("Client >> " + time);
if (wynik != 0)
{
String respond = "Roger";
byte[] responddata = Encoding.ASCII.GetBytes(respond.ToString());
cli.Send(responddata);
}
}
catch { }
}
}
}
}
i kod klienta:
(MainPage)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
namespace BingClientv2
{
public partial class MainPage : PhoneApplicationPage
{
// Constructor
const int ECHO_PORT = 1001;
public MainPage()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
ClearLog();
SocketClient client = new SocketClient();
Log(String.Format("Łącze z serwerem '{0}' na porcie {1} (echo) ...", "localhost", ECHO_PORT), true);
string result = client.Connect(ECHO_PORT);
Log(result, false); Log(String.Format("Wysyłam '{0}' do serwera ...", TextBoxEcho.Text), true);
result = client.Send(TextBoxEcho.Text);
Log(result, false);
Log("...", true);
result = client.Receive();
Log(result, false);
client.Close();
}
private void Log(string message, bool isOutgoing)
{
string direction = (isOutgoing) ? ">> " : "<< ";
ServerResponse.Text += Environment.NewLine + direction + message;
}
private void ClearLog()
{
ServerResponse.Text = String.Empty;
}
}
}
i klasa SocketClient:
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Net.Sockets;
using System.Threading;
using System.Text;
namespace BingClientv2
{
public class SocketClient
{
Socket socket = null;
static ManualResetEvent clientDone = new ManualResetEvent(false);
const int TIMEOUT_MILLISECONDS = 5000;
const int MAX_BUFFER_SIZE = 2048;
public string Connect(int portnumber)
{
string result = string.Empty;
IPEndPoint hostEntry = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1001);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Unspecified);
SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
socketEventArg.RemoteEndPoint = hostEntry;
socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object s, SocketAsyncEventArgs e)
{
result = e.SocketError.ToString();
clientDone.Set();
});
clientDone.Reset();
socket.ConnectAsync(socketEventArg);
clientDone.WaitOne(TIMEOUT_MILLISECONDS);
return result;
}
public string Send(string data)
{
string response = "Timeout";
if (socket != null)
{
SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
socketEventArg.RemoteEndPoint = socket.RemoteEndPoint;
socketEventArg.UserToken = null;
socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object s, SocketAsyncEventArgs e)
{
response = e.SocketError.ToString();
clientDone.Set();
});
byte[] payload = Encoding.UTF8.GetBytes(data);
socketEventArg.SetBuffer(payload, 0, payload.Length);
clientDone.Reset();
socket.SendAsync(socketEventArg);
clientDone.WaitOne(TIMEOUT_MILLISECONDS);
}
else
{
response = "Socket nie zainicjalizowany";
}
return response;
}
public string Receive()
{
string response = "Timeout";
if (socket != null)
{
SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
socketEventArg.RemoteEndPoint = socket.RemoteEndPoint;
socketEventArg.SetBuffer(new Byte[MAX_BUFFER_SIZE], 0, MAX_BUFFER_SIZE);
socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object s, SocketAsyncEventArgs e)
{
if (e.SocketError == SocketError.Success)
{
response = Encoding.UTF8.GetString(e.Buffer, e.Offset, e.BytesTransferred);
response = response.Trim('\0');
}
else
{
response = e.SocketError.ToString();
}
clientDone.Set();
});
clientDone.Reset();
socket.ReceiveAsync(socketEventArg);
clientDone.WaitOne(TIMEOUT_MILLISECONDS);
}
else
{
response = "Socket nie zainicjalizowany";
}
return response;
}
public void Close()
{
if (socket != null)
{
socket.Close();
}
}
}
}
Pomóżcie!