您的位置:首页 > 其它

简单socket服务(三)实现多客户端向服务器发送数据并保证服务器接收到数据

2013-02-12 21:22 946 查看
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace MyAsyncClient
{
class Program
{

static void Main(string[] args)
{
startClient();
}

public static ManualResetEvent connEvent = new ManualResetEvent(false);
public static ManualResetEvent receiveEvent = new ManualResetEvent(false);
public static ManualResetEvent sendEvent = new ManualResetEvent(false);
public static byte[] byteData = new byte[1024];

public static void startClient()
{
IPAddress ipAddress = IPAddress.Parse("192.168.1.101");
IPEndPoint ipEnd = new IPEndPoint(ipAddress,1002);
Socket client = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
Console.WriteLine("client is start!");
client.BeginConnect(
ipEnd,
new AsyncCallback(ConnectedCallback),
client);
connEvent.WaitOne();
}

public static void ConnectedCallback(IAsyncResult asyncResult)
{

Socket client = (Socket)asyncResult.AsyncState;
Console.WriteLine("connected to server:"+client.RemoteEndPoint);
client.EndConnect(asyncResult);
//connEvent.Set();
string mess;
while((mess=Console.ReadLine())!="exit")
//for (int i= 0; i < 10; i++)
{
send(client,mess+"\r\n");
}

}

public static void send(Socket client,string message)
{
byteData = Encoding.ASCII.GetBytes(message);
Console.WriteLine("send a message:"+message);
client.BeginSend(
byteData,
0,
byteData.Length,
0,
new AsyncCallback(SendCallback),
client);
//sendEvent.WaitOne();
}

public static void SendCallback(IAsyncResult asyn)
{
Socket client = (Socket)asyn.AsyncState;
client.EndSend(asyn);

}
}
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Net;
using System.Net.Sockets;

namespace MyAsyncServer
{
class Program
{
private static byte[] byteData = new byte[1024];

static void Main(string[] args)
{

startListen();
}
public static ManualResetEvent connEvent = new ManualResetEvent(false);
public static ManualResetEvent receiveEvent = new ManualResetEvent(false);
public static ManualResetEvent sendEvent = new ManualResetEvent(false);
public static void startListen()
{
try
{
IPAddress ipAddress = IPAddress.Parse("192.168.1.101");
IPEndPoint ipEnd = new IPEndPoint(ipAddress, 1002);
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(ipEnd);
serverSocket.Listen(10);

Console.WriteLine("server is start!");
while (true)
{
connEvent.Reset();
serverSocket.BeginAccept(
new AsyncCallback(AcceptedCallback),
serverSocket);
connEvent.WaitOne();
}

}
catch (Exception)
{
throw;
}
}
public static void AcceptedCallback(IAsyncResult asynResult)
{
connEvent.Set();
Socket server = (Socket)asynResult.AsyncState;
Socket handler = server.EndAccept(asynResult);
Console.WriteLine("a client is connected:"+handler.RemoteEndPoint);

server.BeginAccept(
new AsyncCallback(AcceptedCallback),
server);
Receive(handler);
}

public static void Receive(Socket handler)
{
handler.BeginReceive(
byteData,
0,
byteData.Length,
SocketFlags.None,
new AsyncCallback(ReceivedCallback),
handler);
}

public static void ReceivedCallback(IAsyncResult asynResult)
{
Socket handler = (Socket)asynResult.AsyncState;
int length = handler.EndReceive(asynResult);
string receivedString = Encoding.ASCII.GetString(byteData, 0, length);
Console.WriteLine("received message:" + receivedString);
handler.BeginReceive(
byteData,
0,
byteData.Length,
SocketFlags.None,
new AsyncCallback(ReceivedCallback),
handler);

}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐