熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

最基本的Socket編程

2013-11-13 09:47:15  來源: .NET編程 

  示例程序是同步套接字程序功能很簡單只是客戶端發給服務器一條信息服務器向客戶端返回一條信息這裡只是一個簡單的示例是一個最基本的socket編程流程在接下來的文章中會依次記錄套接字的同步和異步以及它們的區別

  下面是示例程序的簡單步驟說明

  服務器端

  第一步用指定的端口號和服務器的ip建立一個EndPoint對像

  第二步建立一個Socket對像

  第三步用socket對像的Bind()方法綁定EndPoint

  第四步用socket對像的Listen()方法開始監聽

  第五步接受到客戶端的連接用socket對像的Accept()方法創建新的socket對像用於和請求的客戶端進行通信;

  第六步通信結束後一定記得關閉socket;

  代碼

  using System;

  using SystemCollectionsGeneric;

  using SystemText;

  using SystemNet;

  using SystemNetSockets;

  namespace server

  {

  class Program

  {

  static void Main(string[] args)

  {

  int port = ;

  string host = ;

  /**////創建終結點(EndPoint)

  IPAddress ip  = IPAddressParse(host);//把ip地址字符串轉換為IPAddress類型的實例

  IPEndPoint ipe = new IPEndPoint(ip port);//用指定的端口和ip初始化IPEndPoint類的新實例

  /**////創建socket並開始監聽

  Socket s = new Socket(AddressFamilyInterNetwork SocketTypeStream ProtocolTypeTcp);//創建一個socket對像如果用udp協議則要用SocketTypeDgram類型的套接字

  sBind(ipe);//綁定EndPoint對像(端口和ip地址)

  sListen();//開始監聽

  ConsoleWriteLine(等待客戶端連接);

  /**////接受到client連接為此連接建立新的socket並接受信息

  Socket temp = sAccept();//為新建連接創建新的socket

  ConsoleWriteLine(建立連接);

  string recvStr = ;

  byte[] recvBytes = new byte[];

  int bytes;

  bytes = tempReceive(recvBytes recvBytesLength );//從客戶端接受信息

  recvStr += EncodingASCIIGetString(recvBytes bytes);

  /**////給client端返回信息

  ConsoleWriteLine(server get message:{} recvStr);//把客戶端傳來的信息顯示出來

  string sendStr = ok!Client send message successful!;

  byte[] bs = EncodingASCIIGetBytes(sendStr);

  tempSend(bs bsLength );//返回信息給客戶端

  tempClose();

  sClose();

  ConsoleReadLine();

  }

  }

  }

  server結果

  

  客戶端

  第一步用指定的端口號和服務器的ip建立一個EndPoint對像

  第二步建立一個Socket對像

  第三步用socket對像的Connect()方法以上面建立的EndPoint對像做為參數向服務器發出連接請求

  第四步如果連接成功就用socket對像的Send()方法向服務器發送信息

  第五步用socket對像的Receive()方法接受服務器發來的信息 ;

  第六步通信結束後一定記得關閉socket

  代碼

  using System;

  using SystemCollectionsGeneric;

  using SystemText;

  using SystemNet;

  using SystemNetSockets;

  namespace Client

  {

  class Program

  {

  static void Main(string[] args)

  {

  try

  {

  int port = ;

  string host = ;

  /**////創建終結點EndPoint

  IPAddress ip = IPAddressParse(host);

  //IPAddress ipp = new IPAddress();

  IPEndPoint ipe = new IPEndPoint(ip port);//把ip和端口轉化為IPEndpoint實例

  /**////創建socket並連接到服務器

  Socket c = new Socket(AddressFamilyInterNetwork SocketTypeStream ProtocolTypeTcp);//創建Socket

  ConsoleWriteLine(Conneting…);

  cConnect(ipe);//連接到服務器

  /**////向服務器發送信息

  string sendStr = hello!This is a socket test;

  byte[] bs = EncodingASCIIGetBytes(sendStr);//把字符串編碼為字節

  ConsoleWriteLine(Send Message);

  cSend(bs bsLength );//發送信息

  /**////接受從服務器返回的信息

  string recvStr = ;

  byte[] recvBytes = new byte[];

  int bytes;

  bytes = cReceive(recvBytes recvBytesLength );//從服務器端接受返回信息

  recvStr += EncodingASCIIGetString(recvBytes bytes);

  ConsoleWriteLine(client get message:{} recvStr);//顯示服務器返回信息

  /**////一定記著用完socket後要關閉

  cClose();

  }

  catch (ArgumentNullException e)

  {

  ConsoleWriteLine(argumentNullException: {} e);

  }

  catch (SocketException e)

  {

  ConsoleWriteLine(SocketException:{} e);

  }

  ConsoleWriteLine(Press Enter to Exit);

  }

  }

  }

  Client端結果

  


From:http://tw.wingwit.com/Article/program/net/201311/11586.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.