我在之前的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通信-----多线程的更多相关文章

  1. 8.多线程和Socket通信

    一.多线程 1.进程的概念: 进程就是应用程序的执行实例,有独立的内存空间和系统资源.当一个应用程序没有执行的时候,它就不是一个进程.   2.进行的特征: (1)动态性:动态产生动态消亡. (2)并 ...

  2. Delphi Socket通信及多线程编程总结

    http://cxhblog.blog.sohu.com/41930676.html 一.Socket通信: Delphi在ScktComp单元中对WinSock进行了封装,该单元提供了TAbstra ...

  3. 并发编程~~~多线程~~~计算密集型 / IO密集型的效率, 多线程实现socket通信

    一 验证计算密集型 / IO密集型的效率 IO密集型: IO密集型: 单个进程的多线程的并发效率高. 计算密集型: 计算密集型: 多进程的并发并行效率高. 二 多线程实现socket通信 服务器端: ...

  4. day36——死锁、递归锁、信号量、GIL、多线程实现socket通信、线程池和进程池

    day36 死锁现象与递归锁 死锁现象 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这 ...

  5. Java多线程技术:实现多用户服务端Socket通信

    目录 前言回顾 一.多用户服务器 二.使用线程池实现服务端多线程 1.单线程版本 2.多线程版本 三.多用户与服务端通信演示 四.多用户服务器完整代码 最后 前言回顾 在上一篇<Java多线程实 ...

  6. 基于多线程的TCP socket通信经典案例

    服务器端 package com.thinkvenus.study.socket; import java.io.BufferedReader; import java.io.IOException; ...

  7. .net平台下C#socket通信(上)

    在开始介绍socket前先补充补充基础知识,在此基础上理解网络通信才会顺理成章,当然有基础的可以跳过去了.都是废话,进入正题. TCP/IP:Transmission Control Protocol ...

  8. 第10章 同步设备I/O和异步设备I/O(4)_利用I/O完成端口实现Socket通信

    I/O完成端口原理见上一篇(可点击这里) 10.5.4.4 利用I/O完成端口实现Socket通信 (1)Accept和AcceptEx流程的比较 ①采用accept方式的流程示意图如下(普通的阻塞函 ...

  9. Flex通信-与Java实现Socket通信实例

    Flex通信-与Java实现Socket通信实例  转自:http://blessht.iteye.com/blog/1136888 博客分类: Flex 环境准备 [服务器端] JDK1.6,“ja ...

随机推荐

  1. Windows Phone 十七、Socket

    Socket 常用类型 StreamSocket:Socket对象 StreamSocketListener:Socket监听对象,适用于服务端 服务端代码 <Grid x:Name=" ...

  2. Microsoft Visual Studio 2015激活密匙

    企业版:http://download.microsoft.com/download/B/8/F/B8F1470D-2396-4E7A-83F5-AC09154EB925/vs2015.ent_chs ...

  3. linux 配置 ftp

    1.检测是否安装ftp 2.apt-get install 安装 (如果安装失败 执行apt-get install update<如果update失败 配置dns让自己的服务器 可以ping ...

  4. C#中Timer使用及解决重入问题

    C#中Timer使用及解决重入问题 ★介绍 首先简单介绍一下timer,这里所说的timer是指的System.Timers.timer,顾名思义,就是可以在指定的间隔是引发事件.官方介绍在这里,摘抄 ...

  5. mvc中测试网络

    .//控制器层面 public string IsAnyNetworkAvailable() { try { foreach (NetworkInterface ni in NetworkInterf ...

  6. virtualenv 安装 lxml

    sudo apt-get install zlib1g-dev sudo apt-get install lib32z1-dev sudo apt-get install libxml2-dev li ...

  7. java综合实训第二次

  8. linux 报错 bash ‘/bin/sh: Syntax error: “(” unexpected

    今天用make 编译 蹦到 bash ‘/bin/sh: Syntax error: “(” unexpected 和 /bin/sh: [[: not found 这种莫名奇妙的错误 原因是是lin ...

  9. 基于bootstrap 的datatable插件的使用(php版)

    Datatables是一款jquery表格插件.它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能.详细学习请参考其官网:http://datatables.net/中文网:http:/ ...

  10. INNO SETUP 读取可变注册表路径的问题

    ;INNO 读取可变注册表路径的问题 ;问题:;我想自动为 FireFox 安装上 Real 的 Mozilla 插件~但是它的路径存放在"HKEY_CURRENT_USER\Softwar ...