今天实现了一个局域网通信的小例子,上来记录一下,代码不成熟,勿拍。

这是我本机客户端:

这是我虚拟机的客户端。

我为他们分配了静态IP,这样就可以实现局域网通信了。注意代码中必须把监视线程的IsBackground属性设置为false,这样关闭窗口时才可以同时将此线程关闭。

默认是true。

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 WinFormChat1
{
public partial class Form1 : Form
{
public static readonly int Socket_Buffer_Len = ; // 8k
string myIP = "172.16.1.48";
string oppositeIP = "172.16.1.211";
string nickName = "你叫啥";
public Form1()
{
InitializeComponent();
} private void btnSend_Click(object sender, EventArgs e)
{
string sendMsg = this.nickName + ":" + msgBox.Text;
//send message
chatBox.Text += "\r\n" + sendMsg;
InvokeSocket(sendMsg); }
Thread workSocket = null;
private void button1_Click(object sender, EventArgs e)
{
this.nickName = this.nickName1.Text;
this.myIP = this.txtMyIP.Text.Trim();
this.oppositeIP = this.txtOpIP.Text.Trim();
workSocket = new Thread(new ThreadStart(ThreadSocketWork));
workSocket.IsBackground = true;
workSocket.Start(); } private void ThreadSocketWork()
{
//自己IP收信
IPAddress ip = IPAddress.Parse(myIP);
Socket m_serverListenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
m_serverListenSocket.Bind(new IPEndPoint(ip, ));
m_serverListenSocket.Listen(); byte[] result = new byte[Socket_Buffer_Len];
while (true)
{
Socket clientSocket = m_serverListenSocket.Accept();
int iCount = clientSocket.Receive(result);
if (iCount > )
{
string msgRcv = Encoding.UTF8.GetString(result, , iCount);
this.BeginInvoke(new Action(() => this.chatBox.Text += "\r\n" + msgRcv));
}
clientSocket.Shutdown(SocketShutdown.Both);
clientSocket.Close();
}
} private bool InvokeSocket(string data)
{
//发到对方IP上
IPAddress ip = IPAddress.Parse(oppositeIP);
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
clientSocket.Connect(new IPEndPoint(ip, ));
}
catch (Exception ex)
{
//TraceUtility.WriteLine("Failed to connect to socket on {0} : {1}, {2}",
// ConfigurationManager.AppSettings["AgentServerIP"], ConfigurationManager.AppSettings["AgentServerPort"], ex.Message);
return false;
} bool result = true;
try
{
clientSocket.Send(Encoding.UTF8.GetBytes(data));
}
catch (System.Exception ex)
{
//TraceUtility.WriteLine("Failed to send socket data to {0} : {1}, {2}",
// ConfigurationManager.AppSettings["AgentServerIP"], ConfigurationManager.AppSettings["AgentServerPort"], ex.Message);
result = false;
}
clientSocket.Shutdown(SocketShutdown.Both);
clientSocket.Close();
return result;
}
}
}

socket实现局域网通信的更多相关文章

  1. UDP广域网,局域网通信-原理分析,穿透技术

    一.UDP局域网通信. 这个比较简单,关于局域网中的2台或者更多的计算机之间的UDP通信,网络上一大把,直接复制粘贴就可以使用,原理也非常简单.所以,本文不做详细介绍. 二.UDP广域通信(包括路由器 ...

  2. wpf C# 数据库 c/s 个人信息管理 wpf局域网通信

    系统功能基本要求 wpf局域网通信 WPF跨线程访问线程安全的数据如解决该类型的CollectionView不支持从调度程序线程以外的线程对其SourceCollection 读取信息null 读取发 ...

  3. UDP局域网通信的Java实现及Android平台尝试

    局域网通信已经很少被他人所提及了,我曾经还尝试过通过蓝牙构建通信网络,这次有机会尝试UDP局域网通信,在这里把一些基本过程和在Android平台上的问题记录一下. 1. UDP基础知识 1.1 什么是 ...

  4. 使用TCP/IP的套接字(Socket)进行通信

    http://www.cnblogs.com/mengdd/archive/2013/03/10/2952616.html 使用TCP/IP的套接字(Socket)进行通信 套接字Socket的引入 ...

  5. java socket实现全双工通信

    java socket实现全双工通信 单工.半双工和全双工的定义 如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工. 如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方 ...

  6. Java 网络编程(五) 使用TCP/IP的套接字(Socket)进行通信

    链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/10/2952616.html 使用TCP/IP的套接字(Socket)进行通信 套接字Socke ...

  7. C#UDP广域网,局域网通信-原理分析

    一.UDP局域网通信. 这个比较简单,关于局域网中的2台或者更多的计算机之间的UDP通信,网络上一大把,直接复制粘贴就可以使用,原理也非常简单.所以,本文不做详细介绍. 二.UDP广域通信(包括路由器 ...

  8. linux c使用socket进行http 通信,并接收任意大小的http响应(四)

    终于说到SOCKET 这里了.SOCKET进行http通信的实际就是利用socket将http请求信息发送给http服务器,然后再利用socket接收http响应. 由于本文与之通信的服务器是ip已知 ...

  9. linux c使用socket进行http 通信,并接收任意大小的http响应(三)

    使用socket进行http通信的时候,浏览器返回的响应经常不是固定长度的,有时候很大,有些时候又非常小,十分讨厌.如果仅仅只是为了接收一小段信息,设置一个十分大的缓存,这样又会十分浪费.而且经常更改 ...

随机推荐

  1. Oracle 学习笔记(一)Oracle的基本介绍与语法

    1.1 Oracle基础知识 1.1.1 介绍 Oracle数据库的主要特点: 支持多用户.大事务量的事务处理 在保持数据安全性和完整性方面性能优越 支持分布式数据处理 具有可移植性 1.1.2 Or ...

  2. hdu 2689

    hdu 2689 超级大水题....两种代码都过了,开始以为n^2会tle,后来竟然过了...汗 注意下cin写在while里面,就可以了 #include <iostream> usin ...

  3. (转)Discuz!NT图文安装教程

    不同目录下的安装方法根据目前大家对论坛的使用需求,在安装上面大致有三种情况,站点根目录下安装,站点虚拟目录下安装和站点子目录下安装. 1.根目录安装 根目录安装是最简单也是稳定系数最高的安装和使用方式 ...

  4. 粗俗易懂的SQL存储过程在.NET中的实例运用

    整理了一下存储过程在项目中的运用,防止遗忘,便记录于此!存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中.用户通过指定存储过程的名字并给出参数( ...

  5. ref - 按引用传递参数

    传递的是引用 在 形参 实参前 加ref

  6. dsoframer组件详细使用(aspx.net)

    近来由于工作需要,要求实现一个office文档在线编辑器 关于在线操作office 我是一点经验没有 网上查了半天资料 锁定了一款组件(ActiveX控件dsoframer,一个用C++实现的offi ...

  7. IE下判断IE版本的语句

    <!--[if lte IE 6]> <![endif]--> IE6及其以下版本可见   <!--[if lte IE 7]> <![endif]--> ...

  8. centos安装vim以及设置

    原文链接:http://www.xiaohuai.com/2884 Centos里的VI只默认安装了vim-minimal-7.x.所以无论是输入vi或者 vim查看文件,syntax功能都无法正常启 ...

  9. 打开的IE网页不是最大化的解决方法

    方法一:先把所有的IE窗口关了;只打开一个IE窗口;最大化这个窗口;关了它;OK,以后的默认都是最大化的了 方法二:先关闭所有的IE浏览器窗口,用鼠标右键点击快速启动栏的IE浏览器图标,在出现的快捷菜 ...

  10. 在birt中解决引用了不存在的绑定出现的问题

    在birt中常出现这个错误,xxx引用了不存在的绑定. 当你选中整个表,然后在下方属性编辑器旁边的绑定中可以看到绑定的字段.不需要的就可以删掉.也可以进行编辑. 想对查出来的数据加条件.可以选中数据明 ...