客户端发送信息给服务器以及服务器接收客户端发来的信息(socket)

Posted 静态类

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了客户端发送信息给服务器以及服务器接收客户端发来的信息(socket)相关的知识,希望对你有一定的参考价值。

服务器端:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SOCKET网络编程
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnWatch_Click(object sender, EventArgs e)
        {
            //创建一个负责监听的Socket
            Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //创建IP地址和端口号对象
            IPAddress ip = IPAddress.Any;//这句Any是获取自己当前本机的IP,
            //IPAddress ip=IPAdress.Parse(txtIP.Text); 这句是获取textbox里面输入的地址
            IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtPort.Text));//这里是获取文本框里输入的端口号,创建了一个端口对象,需要传入ip跟端口号
            //让负责监听的Socket绑定IP地址跟端口号
            socketWatch.Bind(point);
            ShowMsg("监听成功");
            //设置监听队列
            socketWatch.Listen(10);
            Thread th = new Thread(listen);
            th.IsBackground = true;
            th.Start(socketWatch);

        }
        void listen(object o)
        {
            Socket socketWatch = o as Socket;//as的用法就是如果可以的话,那就直接转换过去
            while (true)
            {
                //负责监听的Socket 来接收客户端的连接 创建跟客户端通信的Socket
                Socket socketSend = socketWatch.Accept();
                //如果接收成功,把发送端的地址显示出来
                ShowMsg(socketSend.RemoteEndPoint.ToString() + "连接成功");
                //客户端连接成功后,服务器应该接收客户端发来的消息
                //开启一个新线程,不停的接收客户端发来的信息
                Thread th = new Thread(Recive);
                th.IsBackground = true;
                th.Start(socketSend);

            }
        }
        /// <summary>
        /// 服务器端接收客户端发来的信息
        /// </summary>
        /// <param name="o"></param>
        void Recive(object s)
        {
            Socket socketSend = s as Socket;
            while (true)
            {
                //客户端连接成功后,服务器应该接收客户端发来的消息
                byte[] buffer = new byte[1024 * 1024 * 5];
                int r = socketSend.Receive(buffer); //实际接收到的字节数
                if(r==0)
                {
                    break;
                }
                string str = Encoding.UTF8.GetString(buffer, 0, r);//把接收到的字节转成字符串
                ShowMsg(socketSend.RemoteEndPoint + ":" + str);
            }
        }
        void ShowMsg(string str)
        {
            txtShow.AppendText(str + "\\r\\n");
        }


        private void Form1_Load(object sender, EventArgs e)
        {
            Control.CheckForIllegalCrossThreadCalls = false;
        }
    }
}

 

 

 

客户端:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 接收端
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        Socket sok = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        private void btnWatch_Click(object sender, EventArgs e)
        {

            IPAddress ip = IPAddress.Parse(txtIP.Text);
            IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtPort.Text));
            sok.Connect(point);
            ShowMsg("连接成功");





        }
        void ShowMsg(string str)
        {
            MessageBox.Show(str + "\\r\\n");
        }
        /// <summary>
        /// 客户端给服务器发送消息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            string str = txtSend.Text.Trim();
            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(str);
            sok.Send(buffer);

        }
    }
}

 

以上是关于客户端发送信息给服务器以及服务器接收客户端发来的信息(socket)的主要内容,如果未能解决你的问题,请参考以下文章

java socket技术 客户端实现不发送请求给服务端但是一直接收服务端发来的数据

java在线聊天项目0.9版 实现把服务端接收到的信息返回给每一个客户端窗口中显示功能之客户端接收

alertmanager和altermanager一样吗

java在线聊天项目1.3版 ——设计好友列表框功能

java如何实现两个客服端之间互相发送信息

分布式数据库服务器的四层架构