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

这是我本机客户端:

这是我虚拟机的客户端。

我为他们分配了静态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. C# DBNULL与NULL之间的区别【转】

    null是.net中无效的对象引用.DBNull是一个类.DBNull.Value是它唯一的实例.它指数据库中数据为空(<NULL>)时,在.net中的值.null表示一个对象的指向无效, ...

  2. HTML基本概念

    什么是 HTML? HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记语言 (ma ...

  3. maven项目java包名的路径问题

    maven项目中错误: 找不到或无法加载主类

  4. 请帮我看看这个页面,红色部份如何改才能保存到ACCess数据库中

    <% if session("shiwei_username")="" then %> <script language="java ...

  5. java 对list中对象按属性排序

    实体对象类 --略 排序类----实现Comparator接口,重写compare方法 package com.tang.list; import java.util.Comparator; publ ...

  6. String的format方法

    摘自:http://xiongzhenhui.iteye.com/blog/940416 http://blueram.iteye.com/blog/441683 一.常规类型.字符类型和数值类型的格 ...

  7. Drupal建站过程思考——不识庐山真面目,只缘身在此山中

    使用drupal与没有使用drupal,在网站的设计过程上本质是一样的!所以,我们在使用drupal建一个新网站时,要时刻联想自己在没有drupal时是如何设计开发的. 不使用drupal时,我们通常 ...

  8. php 防止SQL注入函数

    function inject_check($sql_str) { return eregi('select|insert|and|or|update|delete|\'|\/\*|\*|\.\.\/ ...

  9. ASP.NET MVC下的异步Action的定义和执行原理

    一.基于线程池的请求处理ASP.NET通过线程池的机制处理并发的HTTP请求.一个Web应用内部维护着一个线程池,当探测到抵达的针对本应用的请求时,会从池中获取一个空闲的线程来处理该请求.当处理完毕, ...

  10. 机器人操作系统ROS | 简介篇

    同样,从个人微信公众号Nao(ID:qRobotics)搬运. 前言 先放一个ROS Industrial一周年剪辑视频. ROS已经发布八周年了,在国外科研机构中非常受欢迎.目前,以美国西南研究院为 ...