Tcp通信

简介:

一直想学习网络编程,好不容易终于写出来了。非常感谢 李.net,他的文章最终帮助了我。学习中总是有那么多曲折。

因为我用的是vista,默认支持ipv6,给我带来很大痛苦。希望我下面的代码能给我跟我一样的初学者一点帮助。 


ExpandedBlockStart.gif
  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.Threading;
  9 using System.Net;
 10 using System.Net.Sockets;
 11 
 12 namespace NetStudy
 13 {
 14     delegate void ListBoxAppendItem(object o);
 15     public partial class MyTalk : Form
 16     {
 17 
 18         #region Vars
 19         IPAddress targetIP;
 20 
 21         Thread serverThread, clientThread,receiveThread;
 22         Socket serverSocket, clientSocket,receiveSocket;
 23 
 24         ListBoxAppendItem AddItem ;
 25         void addItem(object o)
 26         {
 27             listBox.Items.Add(o);
 28         }
 29         #endregion
 30 
 31         #region Constrators
 32         public MyTalk()
 33         {
 34             InitializeComponent();
 35             AddItem = new ListBoxAppendItem(addItem);
 36         }
 37         #endregion
 38 
 39         #region Events
 40         //Connect
 41         private void btCnnect_Click(object sender, EventArgs e)
 42         {
 43             try
 44             {
 45                 targetIP = IPAddress.Parse(txtTarget.Text.Trim());
 46                 clientThread = new Thread(new ThreadStart(clientConnect));
 47                 clientThread.IsBackground = true;
 48                 clientThread.Start();
 49             }
 50             catch (Exception exc)
 51             {
 52                 listBox.Items.Add(exc.Message);
 53             }
 54         }
 55         //Sent
 56         private void btSent_Click(object sender, EventArgs e)
 57         {
 58             string str = txtMessage.Text;
 59             if (!string.IsNullOrEmpty(str))
 60             {
 61                 sent(str);
 62                 txtMessage.Clear();
 63             }
 64         }
 65         //load and start listen
 66         private void MyTalk_Load(object sender, EventArgs e)
 67         {
 68             serverThread = new Thread(new ThreadStart(startListen));
 69             serverThread.IsBackground = true;
 70             serverThread.Start();
 71         }
 72         #endregion
 73 
 74         #region ClientMethods
 75         void clientConnect()
 76         {
 77             clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 78             Socket s = clientSocket;
 79             try
 80             {
 81                 s.Connect(targetIP, 9898);
 82                 listBox.Invoke(AddItem, targetIP .ToString () +" - Connect Success!");
 83             }
 84             catch (Exception exc)
 85             {
 86                 listBox.Invoke(AddItem, exc.Message);
 87             }
 88             
 89         }
 90         void sent(string message)
 91         {
 92             byte[] buf = new byte[1024];
 93             buf = System.Text.Encoding.Unicode.GetBytes (message );
 94             try
 95             {
 96                 clientSocket.Send(buf, buf.Length, SocketFlags.None);
 97                 listBox.Invoke(AddItem, "TO" + txtTarget.Text + message);
 98             }
 99             catch (Exception exc)
100             {
101                 listBox .Invoke (AddItem ,exc.Message );
102             }
103         }
104         #endregion
105 
106         #region ServerMethods
107         void startListen()
108         {
109             IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9898);
110             serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
111             serverSocket.Bind(ipep);
112             serverSocket.Listen(10);
113             while (true)
114             {
115                 try
116                 {
117                     receiveSocket = serverSocket.Accept();
118                     receiveThread = new Thread(new ThreadStart(receiveData));
119                     receiveThread.Start();
120                 }
121                 catch (SocketException sexc)
122                 {
123                     listBox.Invoke(AddItem, sexc .Message );
124                 }
125             }
126         }
127         void receiveData()
128         { 
129             
130             int bufLen = 0;
131             byte[] buf = new byte[1024];
132             string data=null;
133             bool keepAlive = true;
134             Socket s = receiveSocket;
135             IPEndPoint ipep = (IPEndPoint)s.RemoteEndPoint;
136             while (keepAlive)
137             {
138                 try
139                 {
140                     bufLen = s.Available;
141                     s.Receive(buf, bufLen, SocketFlags.None);
142                     data = System.Text.Encoding.Unicode.GetString(buf, 0, bufLen);
143                 }
144                 catch (SocketException sec)
145                 {
146                     listBox.Invoke(AddItem, sec.Message);
147                 }
148                 if(!string .IsNullOrEmpty (data))
149                 listBox.Invoke(AddItem, (object)(Dns.GetHostEntry(ipep.Address.ToString()).HostName + "(" + ipep.Address + "):" + data.ToString()));
150             }
151 
152             
153 
154         }
155         #endregion
156 
157     }
158 }
159 
本文转自today4king博客园博客,原文链接:http://www.cnblogs.com/jinzhao/archive/2008/08/05/1260636.html,如需转载请自行联系原作者
相关文章
|
网络协议 物联网 开发者
NB-IoT 通信之 TCP 收发数据 | 学习笔记
快速学习 NB-IoT 通信之 TCP 收发数据
794 0
NB-IoT 通信之 TCP 收发数据 | 学习笔记
|
4月前
|
网络协议 安全 Java
Java网络编程入门指南:TCP/IP协议与Socket通信
Java网络编程入门指南:TCP/IP协议与Socket通信
55 1
|
6月前
|
SQL 网络协议 前端开发
🚀超级简单的图解TCP/IP,看不懂来打我:OSI模型与通信示例🚀
🚀超级简单的图解TCP/IP,看不懂来打我:OSI模型与通信示例🚀
|
监控 网络协议 安全
一文了解HTTP、HTTPS、TCP、UDP、Websocket(论点:概念、通信流程、异同点、应用领域)
一文了解HTTP、HTTPS、TCP、UDP、Websocket(论点:概念、通信流程、异同点、应用领域)
|
网络协议
Netty实现TCP通信
Netty实现TCP通信
|
网络协议
TCP编程中的客户端与服务端的通信实现
TCP编程中的客户端与服务端的通信实现
107 0
|
网络协议 Unix Linux
linux网络编程(三) TCP通信时序与多进程/线程并发服务器的编写
linux网络编程(三) TCP通信时序与多进程/线程并发服务器的编写
279 0
linux网络编程(三) TCP通信时序与多进程/线程并发服务器的编写
|
机器学习/深度学习 网络协议 机器人
socket库:Python实现TCP/IP客户和服务器通信
socket库:Python实现TCP/IP客户和服务器通信
420 0
socket库:Python实现TCP/IP客户和服务器通信
|
网络协议
套接字编程:TCP通信程序
套接字编程:TCP通信程序
140 0
|
网络协议
网络通信学习笔记(三)---TCP通信及文件上传
网络通信学习笔记(三)---TCP通信及文件上传
网络通信学习笔记(三)---TCP通信及文件上传