博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tcp通信
阅读量:6637 次
发布时间:2019-06-25

本文共 3792 字,大约阅读时间需要 12 分钟。

一直想学习网络编程,好不容易终于写出来了。非常感谢 李.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,如需转载请自行联系原作者
你可能感兴趣的文章
使用mvc3实现ajax跨域
查看>>
CentOS安装配置Samba
查看>>
ISCSI测试
查看>>
java算法面试题:从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序 ;读取docx 读取doc 使用poi 相关jar包提集提供下载...
查看>>
回溯法 - 数据结构与算法
查看>>
Unix环境高级编程(五)进程环境
查看>>
【转】C 编译器优化过程中的 Bug
查看>>
AJAX
查看>>
SQL Server安装
查看>>
vue cli3.0快速搭建项目详解(强烈推荐)
查看>>
Linux常见命令总结
查看>>
【Windows编程】系列第二篇:Windows SDK创建基本控件
查看>>
Python瓦匠 —— 正则表达式(六)
查看>>
Linux主要shell命令详解(下)
查看>>
HTML通过button触发input-file控件上传文件的问题
查看>>
介绍我的家乡-信阳(日语)
查看>>
描述Spring Web MVC的工作流程
查看>>
柱、锥、台、球的体积公式推导(不用积分)
查看>>
jqgrid 中的事件
查看>>
Ubuntu docker Postgresql
查看>>