1. 程式人生 > >用Socket做一個區域網聊天工具

用Socket做一個區域網聊天工具

程式設計成為簡單的服務端和客戶端之間的通訊, 但通過一些方法可以將這兩者進行統一起來, 讓服務端也成為客戶端, 讓客戶端也成為服務端, 使它們之間可以互相隨時不間斷的通訊. 考慮到實現最原始的服務端和客戶端之間的通訊所需要的步驟對於寫這樣的程式是很有幫助的.

  作為服務端, 要宣告一個Socket A並繫結(Bind)某一個IP+這個IP指定的通訊埠, 比如這個是127.0.0.1:9050, 然後開始監聽(Listen), Listen可以監聽來自多個IP傳過來的連線請求, 具體可以同時連線幾個客戶端, Listen方法中可以設定一個引數. 如果Listen到某一個客戶端發來連線請求了, 這時定義一個新的Socket B專門負責與這個客戶端的通訊, Socket B = A.Accept(). 這時可以獲取這個客戶端的IP和埠,  IPEndPoint C = (IPEndPoint)B.RemoteEndPoint, C.Address和C.Port分別表示客戶端C的IP地址和埠. 這時通過B.Send()方法就可以給C傳送訊息了, B.Receive()可以接收客戶端C發來的資訊.

  作為客戶端, 也需要宣告一個Socket D並繫結某一個IP+本機一個未被佔用的埠, 定義IPEndPoint E表示要進行連線的服務端Socket, 要指明E的IP和埠, 這樣才可以進行埠對埠之間的通訊, 接下來就可以嘗試D.Connect(E), 連線成功之後就可以傳送和接收資料了, D.Send(), D.Receive.

  傳送訊息時, 資料都是以位元組或位元組陣列為單位進行傳輸的, 比如我客戶端D要傳送"Hello World"則要這樣寫: D.Send(Encoding.ASCII.GetBytes("Hello World")).  接受訊息時, 也是以位元組或位元組陣列, 比如服務端要接受D剛才傳送的Hello World, 可以這樣寫: Byte[] data = new Byte[1024]; int receivedDataLength = B.Receive(data); string stringdata = Encoding.ASCII.GetString(data, 0, receivedDataLength); stringdata這時就是Hello World.

  上面只是大概的闡述了服務端與客戶端之間的通訊過程, 在網上找到了具體的程式碼例子, 也貼過來參考參考. 這個例子沒有將服務端與客戶端統一起來, 他是分別寫服務端和客戶端的.

  服務端:

  using  System;

  using  System;

  using  System.Net;

  using  System.Net.Sockets;

  using  System.Text;

  namespace  tcpserver

  {

  ///   <summary>

  ///  Class1 的摘要說明。

  ///   </summary>

  class  server

  {

  ///   <summary>

  ///  應用程式的主入口點。

  ///   </summary>

  [STAThread]

  static   void  Main( string [] args)

  {

  //

  //  TODO: 在此處新增程式碼以啟動應用程式

  //

  int  recv; // 用於表示客戶端傳送的資訊長度

  byte [] data;// = new   byte [ 1024 ]; // 用於快取客戶端所傳送的資訊,通過socket傳遞的資訊必須為位元組陣列

  IPEndPoint ipep = new  IPEndPoint(IPAddress.Any, 9050 ); // 本機預使用的IP和埠

  Socket newsock = new  Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

  newsock.Bind(ipep); // 繫結

  newsock.Listen( 10 ); // 監聽

  Console.WriteLine( " waiting for a client  " );

  Socket client = newsock.Accept(); //當有可用的客戶端連線嘗試時執行,並返回一個新的socket,用於與客戶端之間的通訊

  IPEndPoint clientip = (IPEndPoint)client.RemoteEndPoint;

  Console.WriteLine( " connect with client: " + clientip.Address + "  at port: " + clientip.Port);

  string  welcome = " welcome here! " ;

  data = Encoding.ASCII.GetBytes(welcome);

  client.Send(data,data.Length,SocketFlags.None); // 傳送資訊

  while ( true )

  { // 用死迴圈來不斷的從客戶端獲取資訊

  data = new   byte [ 1024 ];

  recv = client.Receive(data);

  Console.WriteLine( " recv= " + recv);

  if  (recv == 0 ) // 當資訊長度為0,說明客戶端連線斷開

  break ;

  Console.WriteLine(Encoding.ASCII.GetString(data, 0 ,recv));

  client.Send(data,recv,SocketFlags.None);

  }

  Console.WriteLine( " Disconnected from " + clientip.Address);

  client.Close();

  newsock.Close();

  }

  }

  }


TAG標籤: 區域網 聊天 socket

相關推薦

Socket一個區域網聊天工具

程式設計成為簡單的服務端和客戶端之間的通訊, 但通過一些方法可以將這兩者進行統一起來, 讓服務端也成為客戶端, 讓客戶端也成為服務端, 使它們之間可以互相隨時不間斷的通訊. 考慮到實現最原始的服務端和客戶端之間的通訊所需要的步驟對於寫這樣的程式是很有幫助的.   作為服務端,

Java一個及時翻譯工具

                     平時看英文文件或者查詢資料的時候,遇到了不懂的單詞,就要去百度,然後就會很麻煩。於是就想到用Java寫一個及時翻譯的小工具!預期的實現效果: 雙擊選中一個單詞,按下Ctrl+C進行復制 然後馬上顯示出對應單詞的中文翻譯首先基本思路是這樣的:    首先獲取系統剪下板的

socket一個簡單的聊天程式

服務端程式碼: # 建立socket物件:socket.socket()——>繫結IP地址和埠:bind——>監聽:listen——># 得到請求:accept——>接收請求:recv——>傳送資訊:send——>關閉close   i

socket一個簡單的聊天程序

cli list t對象 bind bre hid lis 結束 聊天 服務端代碼: # 創建socket對象:socket.socket()——>綁定IP地址和端口:bind——>監聽:listen——># 得到請求:accept——>接收請求:r

Python一個聊天機器人

最近在使用騰訊語音合成時發現了一個有趣的東西:智慧閒聊 好奇之下點了進去,發現是一個智慧聊天的功能。然後就順勢根據這個api寫了一個簡單的聊天機器人。 好了,廢話不多說,下面來一步一步實現聊天機器人 1:在騰訊ai開放平臺建立一個應用。 2:獲得該應用的app_id

10行程式碼讓你秒變撩妹達人:Python一個聊天機器人

導讀:用Python做一個聊天機器人,這樣你就可以邊寫程式碼邊撩妹了~作者:大鄧來源:大鄧和他的

Electron一個網頁自動登入工具(如Alipay)

Electron的好處是可以使用webview載入本地或者遠端的web頁面,還可以控制與webview載入頁面的互動,比如注入javascript,返回資訊給主執行緒。 基本的做法是: 2.webview中載入dom-ready監聽: webview.addEven

C#編寫的區域網聊天工具(本菜鳥剛學Socket,拿來分享下~~~)

class Server //服務端方法 { #region 繫結IP、埠 IniOperate io = new IniOperate("C:\\lwj.ini"); public Socket Bind()

怎麽cookie一個選項卡?

eight splay i++ 作用 code round tab 多網站 個性化 什麽是cookie? Cookies雖然一般都以英文名呈現,但是它還是有一個可愛的中文名“小甜餅”。Cookies是指服務器暫存放在你的電腦裏的txt格式的文本文件資料,主要用

繞過010Editor網絡驗證(python一個仿真http server真容易,就幾行代碼)

headers redirect 如果 table 本地 align cnn 破解版 resp 010Editor是一款非常強大的十六進制編輯器,尤其是它的模板功能在分析文件格式時相當好用!網上現在也有不少010Editor的破解版,如果沒錢或者舍不得花錢買授權的話,去官方

星期四、星期五、星期一—GUI一個簡易的交易系統

his 換行 巧克力 cal show .get ner 文本域 array 1、登錄界面 package org.eclipse.wb.swing; //登錄界面 import java.awt.BorderLayout;import java.awt.EventQue

vue一個酷炫的menu

方法 tar ges enter 導入 count https 簡單 ren 寫在前面 最近看到一個非常酷炫的menu插件,一直想把它鼓搗成vue形式,誰讓我是vue的死灰粉呢,如果這都不算愛??。??開個小玩耍,我們一起來探索黑魔法吧。觀看本教程的讀者需要

【python基礎】字典一個小型的查詢數據庫

import oot 字符 odin 參數錯誤 err 輸出 put 異常 例子來源於《python基礎教程》第三版,57p 該例子主要是使用字典的方式,實現一個小型的數據庫,通過查詢字典的鍵值來獲取用戶的信息。 本人修改了部分代碼。 #!/usr/bin/python3

懶人動手,python一個基礎翻譯重新命名器(破解百度翻譯反爬手段)

想法: 在做開發的時候,經常需要命名各種變數,方法/函式,類,包,庫等。 走一遍流程就是:想好要起的名字,比如“非常帥氣”; 然後上翻譯網站,比如百度翻譯,有道翻譯; 將中文輸入並讓其翻譯成英文,此時就得出一個“very handsome”的單詞; 根據駝峰命名法,我們最後需要得

Vue 一個簡單的購物app

有意思 應用程序 其中 ins com 簡單的 node.js 引入 大神 前言 最近在學習Vue的使用。看了官方文檔之後,感覺挺有意思的。於是著手做了一個簡單的購物app。這是我第一次在這個網站上寫分享,如有不當之處,請多多指教。 一整個項目寫下來,最大的感覺就是組件式開

java一個簡單的打字遊戲

Java也是可以做桌面程式的。只不過需要執行在裝有JDK的電腦環境上,所以應用不是很廣泛,但是用來提高自身的程式碼邏輯還是可以的!偶有一天看到金山的打字通,就想起何不做個簡單的打字遊戲用來練練手。於是就有了下文 首先建一個類MyTyping,只有main方法   執行main方法

HTML5一個個人網站,此文僅展示個人主頁介面。內附原始碼下載地址

html5 ,用css去修飾自己的個人主頁 程式碼如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio

列表一個登入系統 功能實現:註冊與登入系統

list1=[]# 儲存使用者名稱 list2=[] #儲存密碼 while True: print('歡迎來到登入頁面') print('1:登入\n2:註冊\n3:退出') xz = int(input('請選擇:')) if xz ==

c實現一個壓力測試工具

#include <stdlib.h> #include <stdio.h> #include <assert.h> #include <unistd.h> #include <sys/types.h> #include <sys/e

發現電腦上還裝著liteide,就golang一個TCP通訊測試

1、參考https://www.cnblogs.com/yin5th/p/9274495.html server端 main.go package main import ( "fmt" "net" ) func main() { // simple t