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

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

Socket类简要介绍

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

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

 Demo测试

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

image

服务端:

 

ExpandedBlockStart.gif 代码
using  System; 
using  System.Collections.Generic; 
using  System.Linq; 
using  System.Text; 
using  System.IO; 
using  System.Net.Sockets; 

namespace  SocketServer 

    
class  Program 
    { 
        
public   static  TcpListener tcpListener; 
        
private   static  NetworkStream networkStream; 
        
private   static  StreamReader streamReader; 
        
private   static  StreamWriter streamWriter; 
        
public   static  Socket socketForClient; 

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

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

 

客户端:

 

ExpandedBlockStart.gif 代码
using  System; 
using  System.Collections.Generic; 
using  System.Linq; 
using  System.Text; 
using  System.IO; 
using  System.Net.Sockets; 

namespace  SocketClient 

    
class  Program 
    { 
        
public   static  TcpClient myclient; 
        
private   static  NetworkStream networkStream; 
        
private   static  StreamReader streamReader; 
        
private   static  StreamWriter streamWriter; 

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

 

 

image 

image

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值