C#socket通信-----多线程
我在之前的socket通信的基础上做了一点改进,使用多线程来使用,程序更加简洁实用。不足之处请指教哦!
话不多说,之前的随笔也有介绍,直接上代码啦!
注意:socket发送接收的都是字节数据
服务端socket(serverSocket):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Threading;
using System.Net.Sockets; namespace serverSocketTest6
{
class Program
{
static Socket serverSocket;
static int port = ; static void Main(string[] args)
{
Console.WriteLine("服务端:"); //实例化socket类
serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse("173.168.5.15");
//标识网络地址
EndPoint point = new IPEndPoint(ip,port);
//绑定IP地址和端口号
serverSocket.Bind(point); //开始监听客户端的连接
serverSocket.Listen();
Console.WriteLine("等待客户端连接..."); Thread myThread = new Thread(ListenClientSocket);
myThread.Start(); Console.ReadKey(); } /// <summary>
/// 监听客户端
/// </summary>
static void ListenClientSocket()
{
while (true)
{
Socket clientSocket = serverSocket.Accept();//接受客户端的连接
Console.WriteLine("客户端连接成功"); string message = "2017,新的开始,新年快乐!加油!继续努力!!!";
byte[] data=Encoding.UTF8.GetBytes(message);
clientSocket.Send(data); Thread receive = new Thread(receiveSocket);//receiveSocket 被传递的方法
receive.Start(clientSocket); //clientSocket 被传递的参数
} } /// <summary>
/// 接收来自客户端的消息
/// </summary>
static void receiveSocket(object clientSocket) ////// 这里的参数是线程中的参数,参数类型必须是object类型
{
Socket myClientSocket = (Socket)clientSocket; //// 将object类型的参数转换成socket类型 使用参数来启动线程,执行后面的代码
while (true)
{
byte[] data=new byte[];
int length = myClientSocket.Receive(data);
string message=Encoding.UTF8.GetString(data,,length);
Console.WriteLine("接收到来自客户端的消息:"+message); }
}
}
}
客户端的代码基本没变~
客户端socket(clientSocket):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Threading;
using System.Net.Sockets; namespace clientSocketTest6
{
class Program
{
static Socket clientSocket;
static int port = ; static void Main(string[] args)
{
Console.WriteLine("客户端:"); //实力化一个socket类
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ip = IPAddress.Parse("173.168.5.15"); //客户端请求与服务端的连接
clientSocket.Connect(ip, port);
Console.WriteLine("服务器连接成功."); //接受数据
byte[] data = new byte[];
int length = clientSocket.Receive(data);
string message = Encoding.UTF8.GetString(data, , length); Console.WriteLine("接受到来自服务端的祝福:" + message); //向服务端发送数居
for (int i = ; i < ; i++)
{
Thread.Sleep();//使该线程暂停(休眠)2s
string message2 = "Fighting!!"; //可以写成string message2=Console.ReadLine();
byte[] data2 = Encoding.UTF8.GetBytes(message2);
clientSocket.Send(data2);
Console.WriteLine("向服务端发送消息:{0}",message2); }
Console.ReadKey(); }
}
}
C#socket通信-----多线程的更多相关文章
- 8.多线程和Socket通信
一.多线程 1.进程的概念: 进程就是应用程序的执行实例,有独立的内存空间和系统资源.当一个应用程序没有执行的时候,它就不是一个进程. 2.进行的特征: (1)动态性:动态产生动态消亡. (2)并 ...
- Delphi Socket通信及多线程编程总结
http://cxhblog.blog.sohu.com/41930676.html 一.Socket通信: Delphi在ScktComp单元中对WinSock进行了封装,该单元提供了TAbstra ...
- 并发编程~~~多线程~~~计算密集型 / IO密集型的效率, 多线程实现socket通信
一 验证计算密集型 / IO密集型的效率 IO密集型: IO密集型: 单个进程的多线程的并发效率高. 计算密集型: 计算密集型: 多进程的并发并行效率高. 二 多线程实现socket通信 服务器端: ...
- day36——死锁、递归锁、信号量、GIL、多线程实现socket通信、线程池和进程池
day36 死锁现象与递归锁 死锁现象 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这 ...
- Java多线程技术:实现多用户服务端Socket通信
目录 前言回顾 一.多用户服务器 二.使用线程池实现服务端多线程 1.单线程版本 2.多线程版本 三.多用户与服务端通信演示 四.多用户服务器完整代码 最后 前言回顾 在上一篇<Java多线程实 ...
- 基于多线程的TCP socket通信经典案例
服务器端 package com.thinkvenus.study.socket; import java.io.BufferedReader; import java.io.IOException; ...
- .net平台下C#socket通信(上)
在开始介绍socket前先补充补充基础知识,在此基础上理解网络通信才会顺理成章,当然有基础的可以跳过去了.都是废话,进入正题. TCP/IP:Transmission Control Protocol ...
- 第10章 同步设备I/O和异步设备I/O(4)_利用I/O完成端口实现Socket通信
I/O完成端口原理见上一篇(可点击这里) 10.5.4.4 利用I/O完成端口实现Socket通信 (1)Accept和AcceptEx流程的比较 ①采用accept方式的流程示意图如下(普通的阻塞函 ...
- Flex通信-与Java实现Socket通信实例
Flex通信-与Java实现Socket通信实例 转自:http://blessht.iteye.com/blog/1136888 博客分类: Flex 环境准备 [服务器端] JDK1.6,“ja ...
随机推荐
- 夺命雷公狗-----React_native---2---sdk的安装
首先回到刚才的那个android的目录下,创建一个sdk文件夹 解压完成后目录结构如下所示: 然后就来设置环境变量,我们需要添加一个"ANDROID_HOME" 然后将这3个文件夹 ...
- delphi实现的RTMP播放
其实知道原理用什么语言实现都是可以的 1. 服务器 提供http服务, 点击start运行. 2. 测试客户端 定时获取http服务的数据, 坐标是服务器中写死的, 在中国地图中画了一个圈. 如: { ...
- LDD3 字符设备驱动简单分析
最近在看LDD3,理解了一下,为了加深自己的印象,自己梳理一下.我用的CentOS release 6.6 (Final)系统. 一.编写编译内核模块的Makefile 以下是我用的Makefile ...
- SQL 2008 R2下载 升级R2 SP1或者SQL 2008从10.50.1600升级10.5.2500
SQL Server 2008 R2 中英文 开发版/企业版/标准版 链接地址 一. 简体中文 1. SQL Server 2008 R2 Developer (x86, x64, ia64) - D ...
- DataGridView中实现checkbox全选的自定义控件
在DataGridView中实现Checkbox的全选的方法就是在列头画一个checkbox, 并给其一个事件. 这个之前很多blog都有写, 这里就不多废话了, codeproject上面有示例代 ...
- IIS的配置
一.首先是安装IIS.打开控制面板,找到“程序与功能”,点进去 二.点击左侧“打开或关闭Windows功能” 三.找到“Internet 信息服务”,按照下图打勾即可 等待安装完成 四.安装完成后,再 ...
- 非root用户 gcc安装
亲测 可以安装 过程并不复杂 但可能需要一些时间 认真一点 按照步骤 一定可以成功哒 其他版本可以将ftp.gnu.org/gnu/gcc/敲入浏览器,找到自己需要的文件:[安装过4.9.0:成功:用 ...
- CSS3 笔记二(Gradients)
CSS3 Gradients Two types of gradients: Linear Gradients (goes down/up/left/right/diagonally) Radial ...
- QT的信号和槽
QObject::connect(&dummy, SIGNAL(sig()), &thread, SLOT(slot_main())); 这里slot_main()是thread类中的 ...
- 分享一个很早之前写的小工具DtSpyPlus
几年前写的一个获取windows窗体基本信息和屏幕取色的小工具 ,一直在用. 下载地址 http://files.cnblogs.com/dint/SpyPlus.zip