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 ...
随机推荐
- [Asp.net]Uploadify上传大文件,Http error 500 解决方案
/// 原来这个项目中用了这个控件 所以config设置文件大小没有 现在可以了 <location path="MailWrite.aspx" > <!--上传 ...
- 【原创】我所理解的自动更新-外网web服务器配置
ClientDownload和ClientUpdate共享渠道配置信息: channel-0.php //以appstore的渠道为例 <?php define('APPNAME', 'TOKE ...
- soj 1015 Jill's Tour Paths 解题报告
题目描述: 1015. Jill's Tour Paths Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description Every ...
- JPA in Spring
JPA(Java Persistence API):Sun官方提出的Java持久化规范,定义了对象-关系映射(ORM)以及实体对象持久化的标准接口.Sun引入JPA出于两个原因:一.简化现有Java ...
- Shellcode编程小技巧
工作需要,需要注入其他程序监控一些东西,检测到的数据通过WM_COPY 消息发送给显示窗体.(大体是这样的还没定稿) ##1 选择一个框架 ## tombkeeper/Shellcode_Templa ...
- Newtonsoft.Json
在线生成实体:http://tool.chinaz.com/tools/json2entity.aspx RootObject ac = new RootObject(); ac = JsonConv ...
- AC6102 DDR2测试工程
AC6102 DDR2测试工程 本文档介绍AC6102上DDR2存储器基于Verilog代码的测试过程.AC6102上使用了2片16bit的DDR2存储器组成了32bit的硬件总线.虽然是32bit硬 ...
- js如何判断获取到的值是否在数组中
很简单,定义一个数组,判断下就得了. var arrayList = [1,2,3,4]; arrayList .indexOf(2); 返回0 arrayList .indexOf(6); 返回1 ...
- 移动端接口:java写get方式访问数据(springmvc+spring。。。)
很多时候,一个问题想明白,找对点了再去问,这样被问的人也知道怎么给你讲,你也听的明白. 就比如做移动端接口,上去就问 怎么弄接口呀,其实是没找到主要的点上,所以不知道怎么弄,那个点就是手机接口是干嘛的 ...
- laravel框架总结(十三) -- redis使用
一切的前提都是已经安装好了redis服务器,并且能启动(我只总结了mac的安装方法:传送门) 我自己使用的是mac系统,有个教程可以参考下,传送门: 1.安装PHP PRedis 1>PRedi ...