当前位置:文档之家› CSocket简单例子服务器与客户端通信优选稿

CSocket简单例子服务器与客户端通信优选稿

C S o c k e t简单例子服务
器与客户端通信
集团文件版本号:(M928-T898-M248-WU2669-I2896-DQ586-M1988)
这个例子只是简单实现了如何使用 Socket 类实现面向连接的通信。

注意:此例子的目的只是为了说明用套接字写程序的大概思路,而不是实际项目中的使用程序。

在这个例子中,实际上还有很多问题没有解决,如消息边界问题、端口号是否被占用、消息命令的解析问题等。

下面是两个程序的代码,(两个程序均为控制台程序)
注:多个TCP连接或多个进程可能需要通过同一个 TCP协议端口传输数据。

为了区别不同的应用程序进程和连接,许多为应用程序与TCP/IP 协议交互提供了称为套接字(Socket)的接口。

先发服务端的(Server)完整代码如下:
引入命名空间:
;
usingSystem.Threading;
namespaceSocketServer
{
classProgram
{
privatestaticbyte[]result=newbyte[1024]; privatestaticintmyProt=8885;//端口
staticSocketserverSocket;
staticvoidMain(string[]args)
{
//服务器IP地址
serverSocket=newSocket(AddressFamily.InterNetwork,SocketType. Stream,ProtocolType.Tcp);
serverSocket.Bind(newIPEndPoint(ip,myProt));//绑定IP地址:端口
serverSocket.Listen(10);//设定最多10个排队连接请求
);
//通过Clientsoket发送数据
ThreadmyThread=newThread(ListenClientConnect);
myThread.Start();
Console.ReadLine();
}
///<summary>
///监听客户端连接
///</summary> privatestaticvoidListenClientConnect()
{
while(true)
{
SocketclientSocket=serverSocket.Accept(); ThreadreceiveThread=newThread(ReceiveMessage); receiveThread.Start(clientSocket);
}
}
///<summary>
///接收消息
///</summary>
///<paramname="clientSocket"></param> privatestaticvoidReceiveMessage(objectclientSocket) {
SocketmyClientSocket=(Socket)clientSocket;
while(true)
{
try
{
//通过clientSocket接收数据
intreceiveNumber=myClientSocket.Receive(result); Console.WriteLine("接收客户端{0}消息
{1}",myClientSocket.RemoteEndPoint.T
}
catch(Exceptionex)
{
Console.WriteLine(ex.Message);
myClientSocket.Shutdown(SocketShutdown.Both); myClientSocket.Close();
break;
}
}
}
}
}
以上是服务端(server)的完整代码。

客户端(Client)的完整代码如下:
引入命名空间:
;
using?System.Threading; namespaceSocketClient
{
classProgram
{
privatestaticbyte[]result=newbyte[1024];
staticvoidMain(string[]args)
{
//设定服务器IP地址
SocketclientSocket=newSocket(AddressFamily.InterNetwork,Socke tType.Stream,ProtocolType.Tcp);
try
{
clientSocket.Connect(newIPEndPoint(ip,8885));//配置服务器IP 与端口
Console.WriteLine("连接服务器成功");
}
catch
{
Console.WriteLine("连接服务器失败,请按回车键退出!"); return;
}
//通过clientSocket接收数据
intreceiveLength=clientSocket.Receive(result);
//通过clientSocket发送数据
for(inti=0;i<10;i++)
{
try
{
Thread.Sleep(1000);//等待1秒钟
stringsendMessage="clientsendMessageHellp"+DateTime.Now; Console.WriteLine("向服务器发送消息:{0}"+sendMessage);
}
catch
{
clientSocket.Shutdown(SocketShutdown.Both); clientSocket.Close();
break;
}
}
Console.WriteLine("发送完毕,按回车键退出"); Console.ReadLine();
}
}
}
编译成功后,先运行服务端(server),再运行客户端(client)即可达到通信效果。

相关主题