服务器端:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms; namespace SOCKET网络编程
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void btnWatch_Click(object sender, EventArgs e)
{
//创建一个负责监听的Socket
Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//创建IP地址和端口号对象
IPAddress ip = IPAddress.Any;//这句Any是获取自己当前本机的IP,
//IPAddress ip=IPAdress.Parse(txtIP.Text); 这句是获取textbox里面输入的地址
IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtPort.Text));//这里是获取文本框里输入的端口号,创建了一个端口对象,需要传入ip跟端口号
//让负责监听的Socket绑定IP地址跟端口号
socketWatch.Bind(point);
ShowMsg("监听成功");
//设置监听队列
socketWatch.Listen(10);
Thread th = new Thread(listen);
th.IsBackground = true;
th.Start(socketWatch); }
void listen(object o)
{
Socket socketWatch = o as Socket;//as的用法就是如果可以的话,那就直接转换过去
while (true)
{
//负责监听的Socket 来接收客户端的连接 创建跟客户端通信的Socket
Socket socketSend = socketWatch.Accept();
//如果接收成功,把发送端的地址显示出来
ShowMsg(socketSend.RemoteEndPoint.ToString() + "连接成功");
//客户端连接成功后,服务器应该接收客户端发来的消息
//开启一个新线程,不停的接收客户端发来的信息
Thread th = new Thread(Recive);
th.IsBackground = true;
th.Start(socketSend); }
}
/// <summary>
/// 服务器端接收客户端发来的信息
/// </summary>
/// <param name="o"></param>
void Recive(object s)
{
Socket socketSend = s as Socket;
while (true)
{
//客户端连接成功后,服务器应该接收客户端发来的消息
byte[] buffer = new byte[1024 * 1024 * 5];
int r = socketSend.Receive(buffer); //实际接收到的字节数
if(r==0)
{
break;
}
string str = Encoding.UTF8.GetString(buffer, 0, r);//把接收到的字节转成字符串
ShowMsg(socketSend.RemoteEndPoint + ":" + str);
}
}
void ShowMsg(string str)
{
txtShow.AppendText(str + "\r\n");
} private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
}
}
}

客户端:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace 接收端
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Socket sok = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
private void btnWatch_Click(object sender, EventArgs e)
{ IPAddress ip = IPAddress.Parse(txtIP.Text);
IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtPort.Text));
sok.Connect(point);
ShowMsg("连接成功"); }
void ShowMsg(string str)
{
MessageBox.Show(str + "\r\n");
}
/// <summary>
/// 客户端给服务器发送消息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
string str = txtSend.Text.Trim();
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(str);
sok.Send(buffer); }
}
}

最新文章

  1. 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进
  2. C语言的传值与传址调用
  3. SQL Server XML基础学习之&lt;7&gt;--XML modify() 方法对 XML 数据中插入、更新或删除
  4. (实用篇)PHP JSON数组与对象的理解
  5. Android 多屏幕适配
  6. XC文件管理器(Android应用)
  7. 《Python 二三事》——python学习必看(转载)
  8. MySQL保留关键字
  9. [翻译]如何编写GIMP插件(二)
  10. c++堆与栈的简单认识
  11. Redis Cluster集群搭建与应用
  12. android官方技术文档翻译——switch 语句转换
  13. 使用Vue-cli搭建多页面应用时对项目结构和配置的调整
  14. Hello The Merciless World!
  15. iOS后台运行播放无声音频 测试可行
  16. HDU 4612 Warm up (边双连通分量+缩点+树的直径)
  17. Nancy的基本用法
  18. Unsupervised learning无监督学习
  19. 【Android】1.2 创建Android模拟器
  20. SpringMVC实现RESTful服务

热门文章

  1. Window注册表的学习记录
  2. [OpenCV实战]8 深度学习目标检测网络YOLOv3的训练
  3. 焦距的物理尺度、像素尺度之间的转换关系以及35mm等效焦距
  4. 道长的算法笔记:Trie字典树
  5. BBS项目 未完待续
  6. vulnhub靶场之BUFFEMR: 1.0.1
  7. CentOS7下配置使用JumpServer 堡垒机 (图文教程)
  8. uniapp如何打包wgt格式
  9. 前端必备基础知识之--------原生JS发送Ajax请求
  10. Azure Artifacts--全平台的程序包管理仓库(支持nuget)