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 ...
随机推荐
- NSAttributedString字符串属性类
//定义一个可变字符串属性对象aStr NSMutableAttributedString *aStr = [[NSMutableAttributedString alloc]initWithStri ...
- idea转eclipse 设置注意。
下载适合的eclipse
- Android -- 思考 -- 为什么要在项目中使用MVP模式
1,其实有时候一直在找借口不去思考这个问题,总是以赶项目为由,没有很认真的思考这个问题,为什么我们要在项目中使用MVP模式,自己也用MVP也已经做了两个项目,而且在网上也看了不少的文章,但是感觉在高层 ...
- linux格式批量转换为dos格式
注:写的只是基本知识,望高手勿喷,写这个不是为了炫耀,只是为了方便其他人,仅此而已. 一:脚本功能: 批量处理目录以及子目录下的文件格式问题,能够轻易的将linux格式转换为dos格式. 二:写此博客 ...
- 鸟哥的linux私房菜学习记录之软件安装RPM,SRPM,YUM
- Web.config配置详解
一.认识Web.config文件 Web.config 文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NET Web ...
- Monkey中ADB命令参数详解
Monkey命令行可用的全部选项: --help列出简单的用法.-v命令行的每一个-v将增加反馈信息的级别.Level 0(缺省值)除启动提示.测试完成和最终结果之外,提供较少信息.Level 1提供 ...
- C#:注册组件
注册flash 为例: 代码比较差 仅供学习参考 /// <summary> /// 注册组件 /// </summary> private static void Regis ...
- 关于yuv格式
首先,内存分布 1:YUV420 (1):I420: YYYYYYYY UU VV =>YUV420P (2): ...
- [课程设计]Scrum 3.8 多鱼点餐系统开发进度(留言反馈系统设计)
Scrum 3.8 多鱼点餐系统开发进度(留言反馈系统设计) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统 ...