很久之前用過Socket,由于近期項目需要用socket傳輸視訊流,早上花了半小時回顧了一下。
socket下提供的主要類有四個,分别是socket,tcpclient,tcplistener,udpclient,他們的作用如下:
Socket 含有大量方法用于網絡連接配接,.net中的一些進階類如webrequest,tcpclient等均調用此類來進行操作
TcpClient 提供用戶端連接配接,用于建立和使用tcp網絡服務
TcpListener 用于從tcp網絡用戶端偵聽連接配接
UdpClient 為udp用戶端建立連接配接,是tcp的備用協定,在本地網絡使用
這個Demo含有兩個project,一個是server,一個是client,為了簡潔,均采用控制台程式
服務端:
代碼
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();
}
}
}
用戶端:
namespace SocketClient
public static TcpClient myclient;
myclient = new TcpClient("localhost", 1234);
Console.WriteLine("已經連接配接到localhost的1234端口");
Console.WriteLine("未能在1234端口連接配接上伺服器");
networkStream = myclient.GetStream();
Console.WriteLine("請輸入一串小寫字母:");
string strInput = Console.ReadLine();
streamWriter.Write(strInput);
Console.WriteLine("正在發送消息");
streamWriter.Flush();
string strServerComes = streamReader.ReadLine();
Console.WriteLine("正在從服務端收取消息");
Console.WriteLine("從服務端收到的消息是:" + strServerComes);
<a target="_blank" href="http://blog.51cto.com/attachment/201106/234255887.png"></a>
<a target="_blank" href="http://blog.51cto.com/attachment/201106/234311884.png"></a>
在windows 7 中需要安全設定,否則socket将無法正常通路端口。
接下來将會做socket與silverlight傳輸文本及視訊流的嘗試。
本文轉自wengyuli 51CTO部落格,原文連結:http://blog.51cto.com/wengyuli/587601,如需轉載請自行聯系原作者