在Silverlight中使用Socket进行通信(1)Socket"请求-回复"方式的简易数据交换

2016-08-20 11:07:44来源:http://wengyuli.blog.51cto.com/44136/587601作者:wengyuli人点击



很久之前用过Socket,由于近期项目需要用socket传输视频流,早上花了半小时回顾了一下。


Socket类简要介绍

socket下提供的主要类有四个,分别是socket,tcpclient,tcplistener,udpclient,他们的作用如下:



Socket 含有大量方法用于网络连接,.net中的一些高级类如webrequest,tcpclient等均调用此类来进行操作
TcpClient 提供客户端连接,用于创建和使用tcp网络服务
TcpListener 用于从tcp网络客户端侦听连接
UdpClient 为udp客户端创建连接,是tcp的备用协议,在本地网络使用

Demo测试

这个Demo含有两个project,一个是server,一个是client,为了简洁,均采用控制台程序




服务端:



代码

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.IO;
usingSystem.Net.Sockets;

namespaceSocketServer
{
classProgram
{
publicstaticTcpListenertcpListener;
privatestaticNetworkStreamnetworkStream;
privatestaticStreamReaderstreamReader;
privatestaticStreamWriterstreamWriter;
publicstaticSocketsocketForClient;

staticvoidMain(string[]args)
{
try
{
tcpListener=newTcpListener(1234);
tcpListener.Start();
Console.WriteLine("服务启动,开始监控1234端口");

socketForClient=tcpListener.AcceptSocket();
networkStream=newNetworkStream(socketForClient);
streamWriter=newStreamWriter(networkStream);
streamReader=newStreamReader(networkStream);
try
{
if(socketForClient.Connected)
{
Console.WriteLine("客户端已连接");
stringstrInput=streamReader.ReadLine();
Console.WriteLine("从客户端传入的字符串是:"+strInput);
stringstrOutput=strInput.ToUpper();
streamWriter.Write(strOutput);
Console.WriteLine("转换后字符串是"+strOutput);
streamWriter.Flush();
}
}
catch(Exceptionex)
{
Console.WriteLine("出现异常:"+ex.Message);
}
}
catch(Exceptionex)
{
Console.WriteLine("发生异常,关闭连接");
tcpListener.Stop();
streamWriter.Close();
streamReader.Close();
networkStream.Close();
}
}
}
}





客户端:



代码

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.IO;
usingSystem.Net.Sockets;

namespaceSocketClient
{
classProgram
{
publicstaticTcpClientmyclient;
privatestaticNetworkStreamnetworkStream;
privatestaticStreamReaderstreamReader;
privatestaticStreamWriterstreamWriter;

staticvoidMain(string[]args)
{
try
{
try
{
myclient=newTcpClient("localhost",1234);
Console.WriteLine("已经连接到localhost的1234端口");
}
catch(Exceptionex)
{
Console.WriteLine("未能在1234端口连接上服务器");
}
networkStream=myclient.GetStream();
streamReader=newStreamReader(networkStream);
streamWriter=newStreamWriter(networkStream);
Console.WriteLine("请输入一串小写字母:");
stringstrInput=Console.ReadLine();
streamWriter.Write(strInput);
Console.WriteLine("正在发送消息");
streamWriter.Flush();
stringstrServerComes=streamReader.ReadLine();
Console.WriteLine("正在从服务端收取消息");
Console.WriteLine("从服务端收到的消息是:"+strServerComes);
}
catch(Exceptionex)
{
Console.WriteLine("发生异常,关闭连接");
streamReader.Close();
streamWriter.Close();
networkStream.Close();
}
}
}
}












在windows 7 中需要安全设置,否则socket将无法正常访问端口。


接下来将会做socket与silverlight传输文本及视频流的尝试。




最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台