成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Google GO與C#之間的TCP通信案例

開發 開發工具
Go語言是Google推出的一種全新的編程語言,具有簡潔的設計、強大的并發能力以及美好的編程體驗。

 我本人也才接觸GO兩個多月的歷史,看了幾本英文教程,讀了些Github上面的源碼,但已經被GO的語言的簡潔和強大的并發能力所吸收,也打算繼續深入的學習,并應用到自己的工作之中。GO語言目前主要適用于服務端的開發,我參考了一些網絡上的教程,做了一些TCP服務端的小練習,其中服務端用GO語言開發,客戶端采用C#。具體參考如下的代碼:https://github.com/yfl8910/gotcpserver

效果圖如下:

服務端代碼:

  1. package main 
  2. import ( 
  3. "net" 
  4. "fmt" 
  5.  
  6. var ( maxRead = 25 
  7.     msgStop   = []byte("cmdStop"
  8.     msgStart  = []byte("cmdContinue"
  9.     ) 
  10. func main() { 
  11.  
  12.     hostAndPort := "localhost:54321" 
  13.     listener := initServer(hostAndPort) 
  14.     for { 
  15.         conn, err := listener.Accept() 
  16.         checkError(err, "Accept: "
  17.         go connectionHandler(conn) 
  18.     } 
  19. func initServer(hostAndPort string) *net.TCPListener { 
  20.     serverAddr, err := net.ResolveTCPAddr("tcp", hostAndPort) 
  21.     checkError(err, "Resolving address:port failed: '" + hostAndPort + "'"
  22.     //listener, err := net.ListenTCP("tcp", serverAddr) 
  23.     listener, err := net.ListenTCP("tcp", serverAddr) 
  24.     checkError(err, "ListenTCP: "
  25.     println("Listening to: ", listener.Addr().String()) 
  26.     return listener 
  27. func connectionHandler(conn net.Conn) { 
  28.     connFrom := conn.RemoteAddr().String() 
  29.     println("Connection from: ", connFrom) 
  30.     talktoclients(conn) 
  31.     for { 
  32.         var ibuf []byte = make([]byte, maxRead + 1) 
  33.         length, err := conn.Read(ibuf[0:maxRead]) 
  34.         ibuf[maxRead] = 0 // to prevent overflow 
  35.     switch err { 
  36.     case nil: 
  37.         handleMsg(length, err, ibuf) 
  38.  
  39.     default
  40.         goto DISCONNECT 
  41.     } 
  42.     } 
  43.     DISCONNECT: 
  44.     err := conn.Close() 
  45.     println("Closed connection:" , connFrom) 
  46.     checkError(err, "Close:" ) 
  47.     } 
  48. func talktoclients(to net.Conn) { 
  49.     wrote, err := to.Write(msgStart) 
  50.     checkError(err, "Write: wrote " + string(wrote) + " bytes."
  51. func handleMsg(length int, err error, msg []byte) { 
  52.     if length > 0 { 
  53.         for i := 0; ; i++ { 
  54.             if msg[i] == 0 { 
  55.                 break 
  56.             } 
  57.         } 
  58.         fmt.Printf("Received data: %v"string(msg[0:length])) 
  59.         fmt.Println("   length:",length) 
  60.     } 
  61. func checkError(error error, info string) { 
  62.     if error != nil { 
  63. panic("ERROR: " + info + " " + error.Error()) // terminate program 

客戶端代碼:

  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.ComponentModel; 
  4. using System.Data; 
  5. using System.Drawing; 
  6. using System.Text; 
  7. using System.Windows.Forms; 
  8. using System.Net; 
  9. using System.Net.Sockets; 
  10. using System.Threading; 
  11.  
  12. namespace TcpClient 
  13.     public partial class Form1 : Form 
  14.     { 
  15.         private IPAddress _ipServer; //服務器IP 
  16.         private IPEndPoint _myServer; //服務器終端 
  17.         private Socket _connectSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//連接套接字 
  18.         private int _port; //端口 
  19.         private Thread receiveThread = null
  20.         public Form1() 
  21.         { 
  22.             InitializeComponent(); 
  23.         } 
  24.  
  25.         private bool ValidateInfo() //檢驗所填信息是否合法 
  26.         { 
  27.             if (!IPAddress.TryParse(txtbxIP.Text, out _ipServer)) 
  28.             { 
  29.                 MessageBox.Show("IP地址不合法!""提示", MessageBoxButtons.OK, MessageBoxIcon.Information); 
  30.                 return false
  31.             } 
  32.            if (!int.TryParse(txtbxPortNum.Text, out _port)) 
  33.             { 
  34.                 MessageBox.Show("端口號不合法!""提示", MessageBoxButtons.OK, MessageBoxIcon.Information); 
  35.                 return false
  36.             } 
  37.             else 
  38.             { 
  39.                 if (_port < 1024 || _port > 65535) 
  40.                 { 
  41.                     MessageBox.Show("端口號不合法!""提示", MessageBoxButtons.OK, MessageBoxIcon.Information); 
  42.                     return false
  43.                 } 
  44.             } 
  45.             return true
  46.         } 
  47.  
  48.  
  49.         private bool ConnectServer() //連接服務器 
  50.         {           
  51.            try 
  52.             { 
  53.                 _connectSocket.Connect(_myServer); 
  54.                 _connectSocket.Send(System.Text.Encoding.UTF8.GetBytes(txtbxUser.Text.ToString())); 
  55.                 
  56.                 return true
  57.             } 
  58.             catch 
  59.             { 
  60.                 MessageBox.Show("服務器連接異常""錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error); 
  61.                 return false
  62.             } 
  63.         } 
  64.  
  65.  
  66.         private void button1_Click(object sender, EventArgs e) 
  67.         { 
  68.             try 
  69.             {          
  70.                 _connectSocket.Send(System.Text.Encoding.UTF8.GetBytes(comboBox1.Text.ToString()));  
  71.             } 
  72.             catch 
  73.             { 
  74.                 MessageBox.Show("服務器連接異常""錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);    
  75.             } 
  76.             
  77.         } 
  78.  
  79.         private void button3_Click(object sender, EventArgs e) 
  80.         { 
  81.           
  82.             if (!ValidateInfo()) 
  83.             { 
  84.                 return
  85.             } 
  86.             _myServer = new IPEndPoint(_ipServer, _port); 
  87.  
  88.             if (ConnectServer() == true
  89.             { 
  90.                 MessageBox.Show("連接成功!"); 
  91.  
  92.             } 
  93.         } 
  94.         private void button2_Click(object sender, EventArgs e) 
  95.         { 
  96.             this.Close(); 
  97.         } 
  98.  
  99.         private void button4_Click(object sender, EventArgs e) 
  100.         { 
  101.             for (int i = 0; i < 1000; i++) { 
  102.                 Socket _connectSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
  103.                 _connectSocket.Connect(_myServer); 
  104.                 _connectSocket.Send(System.Text.Encoding.UTF8.GetBytes(comboBox1.Text.ToString()+i)); 
  105.                 Thread.Sleep(2); 
  106.              
  107.             } 
  108.             
  109.             
  110.         }    
  111.  
  112.     } 

原文鏈接:http://www.cnblogs.com/yfl8910/archive/2012/12/20/2825528.html

 

【編輯推薦】

 

責任編輯:彭凡 來源: 博客園
相關推薦

2009-09-10 11:26:59

C# form

2009-08-24 17:20:13

C#網絡通信TCP連接

2011-03-10 09:07:47

liferayportlet

2009-11-11 10:43:49

Go語言Google

2012-12-24 14:40:54

iosjs

2021-12-16 16:20:57

GoWebSocketLinux

2024-12-24 07:38:44

C#串口通信

2010-03-18 19:06:35

Java socket

2011-07-18 09:47:20

ModBusC#

2010-02-01 13:08:46

C++函數指針C#托

2009-08-13 16:27:07

C#基于TCP協議

2009-08-28 15:35:31

C#與VB.net

2009-09-04 15:57:49

C#實現漢字之間互換

2009-08-28 10:08:02

C#數值類型之間轉換

2024-12-26 14:48:46

C#Modbus通信

2010-03-09 10:59:42

Python語言教程

2015-03-03 13:47:34

HttpTCPIP

2009-08-21 16:14:52

服務端與客戶端通信

2009-08-21 15:59:22

服務端與客戶端通信

2024-04-29 06:39:45

WebSocketSocketC#
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区视频播放 | 国产一区二区三区不卡av | 中文一级片 | 亚洲一区二区三区免费观看 | 国产成人免费视频 | 国产精品自拍视频 | 国产性生活一级片 | 日韩成人在线播放 | 欧美亚洲另类在线 | 国产男女猛烈无遮掩视频免费网站 | 国产不卡视频在线 | 久久av影院| h视频在线观看免费 | av中文在线观看 | 九九热精品视频 | 久草在线| 成人二区 | 中文字幕第90页 | 超碰在线影院 | 男人天堂视频在线观看 | 国产精品毛片久久久久久久 | 国产综合精品一区二区三区 | www.午夜 | 污视频在线免费观看 | 精久久久 | 欧美成人一区二区 | 91精品国产欧美一区二区成人 | a a毛片| 天天干国产 | 亚洲一区二区三区在线播放 | 日韩欧美国产精品一区二区 | 秋霞在线一区 | 男人av网 | 日本午夜一区 | 国产精品高潮呻吟 | 国产精品视频入口 | 黄色网址在线免费播放 | 91偷拍精品一区二区三区 | 日日干夜夜操天天操 | 午夜影院在线观看 | 国产午夜精品一区二区三区在线观看 |