TcpSend窗口用于发送消息,另外写一个用于接收消息的应用程序,消息接受到以后,必须要关闭接收消息的窗口,才能在接收新的消息,不知道怎么能解决这个问题。

源代码:

发送消息的窗口代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;

namespace TCPSocket
{
    public partial class FrmTcpSend : Form
    {
        public FrmTcpSend()
        {
            InitializeComponent();
        }

private void buttonSendFile_Click(object sender, EventArgs e)
        {
           // TcpClient tcpClient = new TcpClient(textBoxHostName.Text, Int32.Parse(textBoxPort.Text));
            TcpClient tcpClient = new TcpClient();
            tcpClient.Connect(IPAddress.Parse(textBoxHostName.Text), Int32.Parse(textBoxPort.Text));

NetworkStream ns = tcpClient.GetStream();

FileStream fs = File.Open("..\\..\\FrmTcpSend.cs", FileMode.Open);

int data = fs.ReadByte();

while (data != -1)
            {
                ns.WriteByte((byte)data);
                data = fs.ReadByte();
            }

fs.Close();
            ns.Close();
            tcpClient.Close();

}

private void buttonSendMessage_Click(object sender, EventArgs e)
        {
            TcpClient tcpClient = new TcpClient();
            tcpClient.Connect(IPAddress.Parse(textBoxHostName.Text), Int32.Parse(textBoxPort.Text));

NetworkStream ns = tcpClient.GetStream();

if (ns.CanWrite)
            {
                Byte[] sendBytes = Encoding.UTF8.GetBytes(textBoxMessage.Text);
                ns.Write(sendBytes, 0, sendBytes.Length);
            }
            else
            {
                MessageBox.Show("不能写入数据流", "终止", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                //Console.WriteLine("You cannot write data to this stream.");
                tcpClient.Close();

// Closing the tcpClient instance does not close the network stream.
                ns.Close();
                return;
            }

ns.Close();
            tcpClient.Close();

}
    }
}

C#TCPClient应用-一个简单的消息发送和接收的更多相关文章

  1. RabbitMQ 简单的消息发送与接收

    RabbitMQ是建立在AMQP(Advanced Message Queuing Protocol,高级消息队列协议)基础上的,而AMQP是建立在TCP协议之上的. 因此,RabbitMQ是需要建立 ...

  2. Java编程的逻辑 (61) - 内存映射文件及其应用 - 实现一个简单的消息队列

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  3. 整合Spring Cloud Stream Binder与GCP Pubsub进行消息发送与接收

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 之前的文章<整合Spring Cloud Stream Binder与RabbitMQ进行消息发送与接收& ...

  4. C#的Socket简单实现消息发送

    Socket一般用于网络之间的通信,在这里,实现的是服务端与客户端的简单消息通信.首先是客户端的搭建,一般步骤是先建立Socket绑定本地的IP和端口,并对远端连接进行连接进行监听,这里的监听一般开启 ...

  5. 一个简单的消息提示jquery插件

    最近在工作中写了一个jquery插件,效果如下: 就是一个简单的提示消息的一个东西,支持最大化.最小化.关闭.自定义速度.自定义点击事件,数据有ajax请求和本地数据两种形式.还有不完善的地方,只做了 ...

  6. DICOM医学图像处理:DIMSE消息发送与接收“大同小异”之DCMTK fo-dicom mDCM

    背景: 从DICOM网络传输一文开始,相继介绍了C-ECHO.C-FIND.C-STORE.C-MOVE等DIMSE-C服务的简单实现,博文中的代码给出的实例都是基于fo-dicom库来实现的,原因只 ...

  7. TeamTalk Android代码分析(业务流程篇)---消息发送和接收的整体逻辑说明

    第一次纪录东西,也没有特别的顺序,想到哪里就随手画了一下,后续会继续整理- 6.2消息页面动作流程 6.2.1 消息页面初始化的总体思路 1.页面数据的填充更新直接由页面主线程从本地数据库请求 2.数 ...

  8. java操作rabbitmq实现简单的消息发送(socket编程的升级)

    准备: 1.下载rabbitmq并搭建环境(和python那篇一样:http://www.cnblogs.com/g177w/p/8176797.html) 2.下载支持的jar包(http://re ...

  9. 为WPF, UWP 及 Xamarin实现一个简单的消息组件

    原文地址:Implementing a simple messenger component for WPF, UWP and Xamarin 欢迎大家关注我的公众号:程序员在新西兰了解新西兰IT行业 ...

随机推荐

  1. VMware系统运维(六)VMware vSphere Web Client安装

    1.开始安装VMware vSphere Web Client 2.下一步 3.接受协议,下一步,大哥求你了,下次直接将这个默认下一步吧,嘿嘿 4.选择安装位置,下一步 5.配置端口号,默认9090和 ...

  2. JS一定要放在Body的最底部么?

    一.从一个面试题说起 面试前端的时候我喜欢问一些看上去是常识的问题.比如:为什么大家普遍把 <script src=""></script> 这样的代码放在 ...

  3. 【转】ASP.NET 高效分页存储过程

    代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-- ...

  4. CSS hacker(兼容IE6、7、8)

    <meta http-equiv="X-UA-Compatible"  content="IE=edge,chrome=1">这行代码是永远以最新的 ...

  5. 解决 Oracle em 无法打开的问题

      重建em emca -deconfig dbcontrol db -repos drop 删除 emca -config dbcontrol db -repos create 创建 set ora ...

  6. php学习笔记4--php中的变量作用域

    变量作用域:可以简单地理解为变量的可见区域,变量能被访问的范围.如同其他语言,php中也有全局作用域和局部作用域之分,但是不同的是:php中的全局作用域指的是:只能在函数外部使用,而局部作用域指的是: ...

  7. MyElcipse之问题小结

    运行MyEclipse时,遇到这一错误提示: An internal error occurred during: "Launching chat on MyEclipse Tomcat & ...

  8. JSP之错误信息提示

    MessageResource.properties配置文件: RegisterAction注册: package com.caiduping.action; import javax.servlet ...

  9. jquery动态移除/增加onclick属性详解

     本文章给大家介绍利用jquery的removeAttr与attr事件来给a标签增加与删除onclick事件的具体操作方法,有需要了解的朋友可参考. 要实现效果:点击链接先去掉onclick属性,3秒 ...

  10. SQL语句统计每天的数据

    按用户注册时间统计每天注册的不同来源.不同状态的用户数量: ), RegisterTime, ) RDate ,--DATEPART(YEAR, RegisterTime) 年 ) END 'AWai ...