簡單的socket同一區域網之間通訊
socket伺服器程式碼
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Net.Sockets; using System.Net; using System.Threading; namespace socket { /// <summary> /// MainWindow.xaml 的互動邏輯 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } Socket ServerSocket = null; private void btnStart_Click(object sender, RoutedEventArgs e) { //將IP地址和埠號繫結到網路節點point上 IPEndPoint IPE = new IPEndPoint(IPAddress.Parse(tboxIP.Text), Int32.Parse(tboxPort.Text)); //例項化套接字 ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //繫結埠 ServerSocket.Bind(IPE); //SOCket開始傾聽 ServerSocket.Listen(10); showmsg("伺服器已啟動,監聽中..."); //建立執行緒 Thread thread = new Thread(ListenClientConnect); //後臺執行緒 thread.IsBackground=true; //執行緒開始 thread.Start(); } //建立一個字典集合 Dictionary<string, Socket> dic = new Dictionary<string, Socket>(); private void ListenClientConnect(object obj) { while (true) { //接收來自客戶端資訊 Socket socketClient = ServerSocket.Accept(); //把客戶端IP裝換為字串 string RemoteIP = socketClient.RemoteEndPoint.ToString(); //字典集合新增IP dic.Add(RemoteIP, socketClient); //委託新增IP Dispatcher.Invoke(()=>lstboxIP.Items.Add(RemoteIP)); showmsg(RemoteIP + "已連線"); //建立接受資訊執行緒 Thread recieveThread = new Thread(recievemsg); //執行緒為後臺執行緒 recieveThread.IsBackground = true; //接收資訊執行緒開始 recieveThread.Start(socketClient); } } private void recievemsg(object soc) { Socket socketClient = (Socket)soc; while (true) { //byte陣列 快取區 byte[] buffer = new byte[1024]; //byte轉int int n = socketClient.Receive(buffer); // string msg = Encoding.Default.GetString(buffer, 0, n); //以UTF8格式接收 //string msg = Encoding.UTF8.GetString(buffer, 0, n); string msg = Encoding.Default.GetString(buffer, 0, n); //顯示接收到的資訊 showmsg(socketClient.RemoteEndPoint.ToString()+":"+msg); } } private void showmsg(string p) { //換行加控制元件顯示 Dispatcher.BeginInvoke(new Action(() => { rtbx.AppendText(p + "\r\n"); })); } private void btnStop_Click(object sender, RoutedEventArgs e) { //關閉socket ServerSocket.Close(); } //傳送資訊 private void btnSend_Click(object sender, RoutedEventArgs e) { showmsg(tboxMsg.Text); //選中IP string ip = lstboxIP.SelectedValue.ToString(); //以byte陣列形式傳送 byte[] by = Encoding.UTF8.GetBytes(tboxMsg.Text); //傳送資訊 dic[ip].Send(by,0); tboxMsg.Text = ""; } } }
介面程式碼
<Window x:Class="socket.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <Label x:Name="label" Content="IP地址:" HorizontalAlignment="Left" Margin="24,15,0,0" VerticalAlignment="Top"/> <TextBox x:Name="tboxIP" HorizontalAlignment="Left" Height="23" Margin="86,17,0,0" TextWrapping="Wrap" Text="172.16.3.3" VerticalAlignment="Top" Width="92"/> <Label x:Name="label1" Content="埠:" HorizontalAlignment="Left" Margin="183,16,0,0" VerticalAlignment="Top"/> <TextBox x:Name="tboxPort" HorizontalAlignment="Left" Height="23" Margin="228,17,0,0" TextWrapping="Wrap" Text="8488" VerticalAlignment="Top" Width="43"/> <Button x:Name="btnStart" Content="伺服器啟動" HorizontalAlignment="Left" Margin="287,19,0,0" VerticalAlignment="Top" Width="75" Click="btnStart_Click"/> <Button x:Name="btnStop" Content="伺服器停止" HorizontalAlignment="Left" Margin="377,19,0,0" VerticalAlignment="Top" Width="75" Click="btnStop_Click"/> <ListBox x:Name="lstboxIP" HorizontalAlignment="Left" Height="180" Margin="377,65,0,0" VerticalAlignment="Top" Width="116"/> <Button x:Name="btnSend" Content="傳送資訊" HorizontalAlignment="Left" Margin="377,271,0,0" VerticalAlignment="Top" Width="75" Click="btnSend_Click"/> <TextBox x:Name="tboxMsg" HorizontalAlignment="Left" Height="23" Margin="24,270,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="320"/> <RichTextBox x:Name="rtbx" HorizontalAlignment="Left" Height="180" Margin="24,65,0,0" VerticalAlignment="Top" Width="320"> <FlowDocument> <Paragraph> </Paragraph> </FlowDocument> </RichTextBox> </Grid> </Window>
socket客戶端
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Threading; using System.Net.Sockets; using System.Net; namespace socket客戶端 { /// <summary> /// MainWindow.xaml 的互動邏輯 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } //客戶端套接字 Socket socketclient = null; private void btnStart_Click(object sender, RoutedEventArgs e) { IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(tboxIP.Text),Int32.Parse(tboxPort.Text)); socketclient = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); socketclient.Connect(ipe); Showmsg("連線成功"); //接受資訊 Thread th = new Thread(recievemsg); th.IsBackground = true; th.Start(); } private void recievemsg(object obj) { while (true) { //緩衝位元組 byte[] by = new byte[1024]; int n = socketclient.Receive(by); string msg = Encoding.Default.GetString(by, 0, n); Showmsg(socketclient.RemoteEndPoint.ToString() + ":" + msg); } } private void Showmsg(string p) { Dispatcher.Invoke(()=>rtboxInfo.AppendText(p+"\r\n")); } private void btnSend_Click(object sender, RoutedEventArgs e) { byte[] buffer = new byte[1024]; Showmsg("我說"+tboxMsg.Text); buffer=Encoding.Default.GetBytes(tboxMsg.Text); socketclient.Send(buffer,0); } } }
介面程式碼
<Window x:Class="socket客戶端.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Label x:Name="label" Content="IP地址:" HorizontalAlignment="Left" Margin="31,16,0,0" VerticalAlignment="Top"/>
<TextBox x:Name="tboxIP" HorizontalAlignment="Left" Height="23" Margin="86,17,0,0" TextWrapping="Wrap" Text="172.16.3.3" VerticalAlignment="Top" Width="92"/>
<Label x:Name="label1" Content="埠:" HorizontalAlignment="Left" Margin="183,16,0,0" VerticalAlignment="Top"/>
<TextBox x:Name="tboxPort" HorizontalAlignment="Left" Height="23" Margin="228,17,0,0" TextWrapping="Wrap" Text="8488" VerticalAlignment="Top" Width="43"/>
<Button x:Name="btnStart" Content="連線伺服器" HorizontalAlignment="Left" Margin="287,19,0,0" VerticalAlignment="Top" Width="75" Click="btnStart_Click"/>
<Button x:Name="btnSend" Content="傳送資訊" HorizontalAlignment="Left" Margin="379,260,0,0" VerticalAlignment="Top" Width="75" Click="btnSend_Click"/>
<RichTextBox x:Name="rtboxInfo" HorizontalAlignment="Left" Height="180" Margin="41,65,0,0" VerticalAlignment="Top" Width="320">
<FlowDocument>
<Paragraph/>
</FlowDocument>
</RichTextBox>
<TextBox x:Name="tboxMsg" HorizontalAlignment="Left" Height="23" Margin="41,260,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="321"/>
</Grid>
</Window>
說明一下ip為本機ip地址,伺服器傳送資訊,必須選擇客戶端傳送
相關推薦
簡單的socket同一區域網之間通訊
socket伺服器程式碼using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Syst
socket實現客戶端和客戶端之間通訊和聊天
1.實體類 package edu.tcu.cn; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.Pr
netlink socket(linux核心模組與使用者態之間通訊例項)
本文通過一個程式設計例項來更深入地瞭解netlink。1.1 實現內容1. 功能Ø 實現一個併發的echo伺服器程式,它(接收端)將接收到字串進行轉換處理後,返回給傳送端;允許有多個傳送端同時存在;Ø 字串的處理包括:直接返回、全部轉換為大
Unity 同一區域網內的電腦 簡單的部署 git託管
Unity專案進行git託管 首先安裝Git, BeyondCompare,Git Extensions(所有電腦) 開始配置: Git Extensions Settings 設定 .填寫相應的
如何使用socket實現unity和Winform之間通訊
實現思路: 在Unity和Winform兩個應用程式中都引入socket,這裡使用TcpClient 伺服器端我們使用Java的mina長連線框架 客戶端的通訊主體框架有兩種,一種是處理器類的,一種是事件繫結的: 伺服器端主體通訊
就該這樣理解 OSI 七層參考模型、淺談不同區域網之間的通訊
簡介 說到OSI參考模型,理解網路與網路之間的關係,不說太深入難以理解的東西,只求能最大程度上理解與使用。 參考模型是國際標準化組織(ISO)制定的一個用於計算機或通訊系統間互聯的標準體系,一般稱為OSI參考模型或七層模型。 概念性的東西,先知道這些就夠了,我們先來聊一聊一個常見的一個模型。 區
C# 兩個進程之間通訊(管道通信 )
click 失敗 != else iss nbsp obj c# cal #region 客戶端 NamedPipeClientStream pipeClient = new NamedPipeClientStream("localhost
Python 簡單socket
type add 地址 cnblogs list recv logs 綁定 響應 OSI七層模型(Open System Interconnection,開放式系統互聯) 應用層 表示層 回話層 傳輸層 tcp,udp 網絡層 ip,icmp 數據鏈路
TCP客戶/服務器簡單Socket程序
main 字段 sockaddr 需要 apple 必須 一個 bin 可能 建立一個 TCP 連接時會發生下述情形: 1. 服務器必須準備好接受外來的連接。這通常通過調用 socket、bind 和 listen 這三個函數來完成,我們稱之為被動打開。 2. 客戶通過調
基於select類型多路IO復用,實現簡單socket並發
清理 就是 ive class sockets true 簡單 Coding conn 還有很多缺限,如客戶斷開無限重復 以下轉至老師博客: server: #!/usr/bin/env python # -*- coding: utf-8 -*- __author__
socket程式設計點到點通訊
//點到點通訊 //伺服器設計 #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <ar
網路程式設計基礎【day08】:簡單socket例項(二)
本節內容 1、概述 2、socket例項 3、總結 一、概述 之前我們只是介紹了soket的概念和一些邏輯圖表,下面我們來看看,socket的客戶端和服務端到底是怎麼用的? 二、socket例項 2.1 客戶端 2.1.1 客戶端程式碼邏輯圖 2.1.2 客戶端程式碼
總結:子視窗建立及父視窗與子視窗之間通訊
1、Javascript彈出子視窗 可以通過多種方式實現,下面介紹幾種方法 (1) 通過window物件的open()方法,open()方法將會產生一個新的window視窗物件 其用法為: window.open(URL,windowName,parameters); UR
java併發程式設計一一多執行緒之間通訊(一)
1.多執行緒之間如何實現通訊 多執行緒之間通訊,其實就是多個執行緒在操作同一個資源,但是操作的動作不同。 1.1什麼是多執行緒之間通訊? 需求:第一個執行緒寫入(input)使用者,另一個執行緒讀取(out)使用者。實現讀一個,寫一個操作。 1.2多執行緒之間通訊需求?
vue父子元件之間通訊例項
一、父元件向子元件傳遞資料 ①獲取資料並在父元件上繫結資料 ②在子元件使用props接收父元件傳遞過來資料 ③將接收的資料繫結到子元件模板 二、子元件向父元件傳遞資料 ①在子元件上定義一個事件 如 @click='handleItemClick'
Socket多客戶端通訊
服務端首先構造的是ServerSocket 物件,傳入構造方法中的引數是埠號,同需連線客戶端的埠號一致。接下來通過ServerSocket 物件的accept()方法來獲取Socket物件,此方法被稱為阻塞方法,該一直在執行,等待客戶端傳送的Socket連線請求,若未收到
程序之間通訊
IPC 指的是程序間通訊 之所以開啟子程序 ,肯定需要他幫我們完成任務,很多情況下,需要將資料返回給父程序。 然而程序記憶體是物理隔離的 解決方案: 1.將共享資料放在檔案中,就是慢 2.管道 subprocess 中那個管道只能單向通訊,必須有父子關係 3.共享一塊記憶體區域 得作業系統幫你
MFC如何獲取同一區域網中主機的IP地址
WNetEnumResource可以用來列舉。 BOOL WINAPI EnumerateFunc(HWND hwnd, &n
TCP/IP、socket、Http之間的聯絡和區別
參考轉載:http://xinzhi.wenda.so.com/a/1510590824200942 網路是資訊傳輸、接收、共享的虛擬平臺,它用物理鏈路將各個孤立的工作站或主機相連在一起,組成資料鏈路,從而達到資源共享和通訊的目的。網路會藉助文字閱讀、圖片檢視、影音播放、下載傳輸、遊戲聊天等軟體
vue——同一區域網內訪問專案
1、想要在手機上訪問本地的vue專案,首先要保證手機和電腦處在同一區域網內(連著同一個無線網) 2、將你電腦的ip設定為固定ip(ipcinfig查詢本地的ip,然後修改它,改為你想變的數字) 3、在vue專案中的 config檔案中的index.js內,將host的配置改為