socket收发消息

1.socket通讯类
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace ConsoleApplication1
{
    public static class SocketTest
    {
        private static Encoding encode = Encoding.Default;
        /// <summary>
        /// 监听请求
        /// </summary>
        /// <param name="port"></param>
        public static void Listen(int port)
        {
            Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            listenSocket.Bind(new IPEndPoint(IPAddress.Any, port));
            listenSocket.Listen(100);
            Console.WriteLine("Listen " + port + " ...");
            while (true)
            {
                Socket acceptSocket = listenSocket.Accept();
                string receiveData = Receive(acceptSocket, 5000); //5 seconds timeout.
                Console.WriteLine("Receive:" + receiveData);
                acceptSocket.Send(encode.GetBytes("ok"));
                DestroySocket(acceptSocket); //import
            }
        }
        /// <summary>
        /// 发送数据
        /// </summary>
        /// <param name="host"></param>
        /// <param name="port"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public static string Send(string host, int port, string data)
        {
            string result = string.Empty;
            Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            clientSocket.Connect(host, port);
            clientSocket.Send(encode.GetBytes(data));
            Console.WriteLine("Send:" + data);
            result = Receive(clientSocket, 5000 * 2); //5*2 seconds timeout.
            Console.WriteLine("Receive:" + result);
            DestroySocket(clientSocket);
            return result;
        }
        /// <summary>
        /// 接收数据
        /// </summary>
        /// <param name="socket"></param>
        /// <param name="timeout"></param>
        /// <returns></returns>
        private static string Receive(Socket socket, int timeout)
        {
            string result = string.Empty;
            socket.ReceiveTimeout = timeout;
            List<byte> data = new List<byte>();
            byte[] buffer = new byte[1024];
            int length = 0;
            try
            {
                while ((length = socket.Receive(buffer)) > 0)
                {
                    for (int j = 0; j < length; j++)
                    {
                        data.Add(buffer[j]);
                    }
                    if (length < buffer.Length)
                    {
                        break;
                    }
                }
            }
            catch { }
            if (data.Count > 0)
            {
                result = encode.GetString(data.ToArray(), 0, data.Count);
            }
            return result;
        }
        /// <summary>
        /// 销毁Socket对象
        /// </summary>
        /// <param name="socket"></param>
        private static void DestroySocket(Socket socket)
        {
            if (socket.Connected)
            {
                socket.Shutdown(SocketShutdown.Both);
            }
            socket.Close();
        }
    }
}
2.socket调用,先启用监听程序
 2.1
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            SocketTest.Listen(11000);
            Console.Read();
        }
    }
}
2.2 再起客户端
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using SocketIM;
using System.Net;
using System.Net.Sockets;
using ConsoleApplication1;

namespace ConsoleApplication2
{

class Program
{
    static void Main(string[] args)
    {
        SocketTest.Send("127.0.0.1", 11000, "www.jb51.net");
        Console.Read();
    }

}
时间: 2024-10-24 13:08:21

socket收发消息的相关文章

socket收发消息原理剖析

conn是套接字对象,addr是客户端的ip地址和端口号 网络底层必须要有物理链接 网卡收发消息是字节流 网线接入网络设备,网络设备运行网络协议构成了互联网 网卡配置IP和mac地址 收消息是在自己的内核态内存收,发消息也是 内核态是缓存或缓冲区 收发消息是跟自己的缓存有关 一个原则:收发消息都是操作自己的缓存区,数据出去是有操作系统控制的 原文地址:https://www.cnblogs.com/jintian/p/10970782.html

同时收发消息

这是因为接受和发送都在主线程中,不能同时进行. 为了实现同时收发消息,基本设计思路是把收发分别放在不同的线程中进行 1. SendThread 发送消息线程2. RecieveThread 接受消息线程3. Server一旦接受到连接,就启动收发两个线程4. Client 一旦建立了连接,就启动收发两个线程 SendThread.java RecieveThread.java Server.java Client.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

客户端服务端循环收发消息

from socket import * 不用每次调用加socket tcp_server=socket(AF_INET,SOCK_STREAM) 收发消息是字节格式 import socket phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) phone.bind(('192.168.1.6',8002)) phone.listen(5) print('------>') conn,addr=phone.accept() while

MingQQ Android版发布了,可以在Android手机上登录你的QQ,收发消息哦...

最近为了学习Android开发,特意将原来写的MingQQ Windows版移植到了Android上面,以此练手.通过这次练习,学习到了不少Android开发的相关知识,特别是界面开发部分. MingQQ的界面模仿了Android QQ的基本功能,虽然体验性完全比不上QQ,但目前技术有限,只能做到现在这水平了,更好的界面用户体验留待以后再提升吧. 下拉刷新目前使用了第三方开源库Android-PullToRefresh,以后再考虑替换成自己写的下拉刷新组件,并增加消息列表的右滑删除功能. 发布的

java编写微信公众账号收发消息

这两天无聊就申请了一个微信的订阅号,然后从网上搜集了些材料,通过搜集的材料使我的公众号可以接收文本消息并返回简单的文本信息.这里做下记录,日后如果要深入研究一下可以从这里捡起. 拿到订阅号后我把头像设置了一下与微信号设置了一番.对于我们来说,最好奇的莫过于它能干嘛,所以就点击了自动回复,自定义了回复内容,然后用自己微信号关注了我的订阅号.关注后,立马给我发了我自己设置的信息.顿时觉得好新奇,感觉不错,然后就是看到自定义菜单了,这东西好啊,可以自己定义菜单,说干就干,我立马设置了三个菜单(一级菜单

ActiveMQ学习笔记(五)——使用Spring JMS收发消息

ActiveMQ学习笔记(四)http://my.oschina.net/xiaoxishan/blog/380446 中记录了如何使用原生的方式从ActiveMQ中收发消息.可以看出,每次收发消息都要写许多重复的代码,Spring 为我们提供了更为方便的方式,这就是Spring JMS.我们通过一个例子展开讲述.包括队列.主题消息的收发相关的Spring配置.代码.测试. 本例中,消息的收发都写在了一个工程里. 1.使用maven管理依赖包 <dependencies> <depend

C# socket 实现消息中心向消息平台 转发消息

公司用到,直接粘代码了 using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks; using Jinher.AMP.SNS.Chat.

ActiveMQ结合Spring收发消息

直接使用 ActiveMQ 的方式需要重复写很多代码,且不利于管理,Spring 提供了一种更加简便的方式----Spring JMS ,通过它可以更加方便地使用 ActiveMQ. Maven 依赖结合Spring使用ActiveMQ的依赖如下: ActiveMQ.xml 文件 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.o

PCB MS SQL 标量函数(CLR) 实现Socket发送消息

在PCB业务系统中,数据库中的数据总是被应用端主动连接数据库并操作数据,是否想过可以让数据库主动的将数据推送出去呢! 答应其实是可以的.比如有这样的应用场景! 当SQL SERVER数据库满足某个条件时,可以让数据库主动的将消息发送出去! 例如:数据库中的某个字段的数据发生变化或客户端触发了某个存储过程时(必须有触发点或任务计划),这时数据库可以主动的将信息发送到其它业务系统或监控平台等系统.下面介绍SQL方式用Socket发送消息. 一.C#写SQL SERVER(CLR)实现Socket发送