1. 程式人生 > >Socket網路程式設計(二)UDP協議實現聊天工具

Socket網路程式設計(二)UDP協議實現聊天工具

package UDP_chat;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.List;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

 class Chat extends Frame {
    List lst = new List(6);
	TextField tfIP = new TextField(15);
	TextField tfData = new TextField(20);
	DatagramSocket ds = null;
	public List setLst(String item,int index){
		lst.add(item, index);
		return lst;
	}
	//建構函式裡面實現視窗初始化、接收資訊(執行緒)、傳送資訊
	public Chat(){
		try{
			ds = new DatagramSocket(3000);
		}catch(Exception e){
			e.printStackTrace();
		}
		this.add(lst,"Center");
		Panel p = new Panel();
		this.add(p,"South");
		
		p.setLayout(new BorderLayout());
		p.add(tfIP,"West");
		p.add(tfData,"East");
		//接收資訊:建立一個執行緒,一直在接收資訊
		new Thread(new Runnable(){
			public void run(){
				byte[] buf = new byte[1024];
				DatagramPacket dp = new DatagramPacket(buf,1024);
				//迴圈接收資訊
				while(true){
					try{
						ds.receive(dp);
						String haha = "訊息:"+new String(dp.getData(),0,dp.getLength())
										+" from "+dp.getAddress().getHostAddress()
										+":"+dp.getPort();
						//將接收的資訊列印到資訊欄
						lst.add(haha,0);
					}catch(Exception e){
						//ds沒有關閉才執行丟擲異常
						if(!ds.isClosed()){
							e.printStackTrace();
						}
					}
				}
			}
		}).start();
		
		//傳送訊息:訊息資訊點回車,觸發事件
		tfData.addActionListener(new ActionListener(){
			//需要實現此方法
			public void actionPerformed(ActionEvent e){
				byte [] buf;
				//獲取訊息資訊
				buf = tfData.getText().getBytes();
				
				try{
					//組裝訊息內容
					DatagramPacket dp= new DatagramPacket(buf,buf.length,
							InetAddress.getByName(tfIP.getText()),3000);
					//傳送訊息
					ds.send(dp);
				}catch(Exception ex){
					ex.printStackTrace();
				}
				tfData.setText("");
			}
		});
		//關閉視窗的觸發事件,關閉ds
		addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				ds.close();
				dispose();
				System.exit(0);
			}
		});
	}
	
	public static void main(String[] args){
		//初始化視窗
		Chat chat = new Chat();
		chat.setSize(300,400);
		chat.setTitle("即時通訊");
		chat.setVisible(true);
		chat.setResizable(false);
	}
}


相關推薦

Socket網路程式設計UDP協議實現聊天工具

package UDP_chat; import java.awt.BorderLayout; import java.awt.Frame; import java.awt.List; import java.awt.Panel; import java.awt.TextField; import jav

python------Socket網路程式設計粘包問題

一.socket網路程式設計  粘包:服務端兩次傳送指令在一起,它會把兩次傳送內容合在一起傳送,稱為粘包,從而出現錯誤。 解決方法:(比較low的方法) 有些需要實時更新的,用sleep有延遲,不能這樣解決問題。 解決方法之高階方法: 客戶端: 二.傳送檔案 ftp s

Python Socket網路程式設計區域網內和區域網與廣域網的持續通訊

目錄 前言 IP地址 簡介 公有IP 私有IP 區域網之間網路通訊 前提 功能描述

Windows網路程式設計Socket簡介

Socket簡介 Socket被稱為套接字,描述了IP和埠等資訊,是一個通訊鏈的控制代碼。 微軟專門開發了一套支援多種網路協議的網路程式設計介面,叫做Winsock,Winsock是Windos SDK的一部分,全稱Windows Sockets API。它對多種協議做了封裝,S

Socket網路程式設計1 ———— 基於TCP協議的客戶-伺服器socket例項

Socket網路程式設計(1) ———— 基於TCP協議的客戶-伺服器socket例項 1、TCP網路程式設計架構 2、程式碼段 伺服器: #include <stdio.h> #include <stdlib.h&

C#網路程式設計------多執行緒socket例項

伺服器端程式碼: using System;   using System.Collections.Generic;   using System.Linq;   using System.Text;   using System.Net;   using Sys

網路程式設計——伺服器和客戶端資訊的獲取

  目錄 1、字串IP地址和二進位制IP地址結構的轉換 2.套接字檔案描述符的判定 3、IP地址與域名之間的相互轉換 4、協議名稱處理函式 1、字串IP地址和二進位制IP地址結構的轉換 #include <sys/socket.h> #inclu

Python Socket網路程式設計初識SocketSocket初步使用

目錄 前言 網路程式設計 實質 IP地址和埠 資料傳輸協議 協議 Socket

Socket網路程式設計

此文使用的協議是 TCP       首先要寫入以下程式碼,不然很多函式都用不了 #include <WinSock2.h> #pragma comment(lib, "ws2_32.lib")   ●伺服器端    

網路程式設計---------------------------套接字詳解

前文有介紹,網路資料的傳輸是通過套接字來實現的,套接字共有3種類型:流式套接字(SOCK_STREAM),資料報套接字(SOCK_DGRAM)和原始套接字(RAW)。在本文中將蛀牙介紹流式套接字與資料包套接字、 一、流式套接字        流式套接字是面向連線的,提供雙

Java粗淺認識-網路程式設計

單執行緒模型 服務端繫結一個埠,然後接收請求,每次請求就處理,後續請求進來時,等待之前的任務處理完成,如果任務處理非常快,也是不會有明顯阻塞的。 單執行緒模型服務端程式碼 展示檔案上傳後處理邏輯,在一個while(true)中阻塞等待accept,由於是演示網路通訊,這裡的檔案I/O快取

Android網路程式設計ConnectivityManager和NetworkInfo詳解

    一.   ConnectivityManager詳解      概要      ConnectivityManager是網路連線相關的管理器,它主要用於查詢網路狀態並在網路發生改變時發出狀態變化通知。這個類主要負責的下列四個方面:      1.  監控網路狀態(包

Android網路程式設計HTTP協議原理

 1.HTTP簡介 HTTP是一個屬於應用層的面向物件的協議,由於其簡捷、快速的方式,適用於分散式超媒體資訊系統。它於1990年提出,經過幾年的使用與發展,得到不斷地完善和擴充套件。 HTTP協議的主要特點 支援C/S(客戶/伺服器)模式。簡單快速:客戶向伺服器請求服

網路程式設計SOAP, WSDL, Web Service

上篇文章講到了,使用網上一個工具WSDL2ObjC.app來把已有的 wsdl轉化為ios可使用的程式碼, 然後通過這部分程式碼進行soap的請求與獲取響應。 但是上面這種方式的劣勢也不言自明, 所以下面將用最原始的方式來做同樣的事情。 這裡首先需要感謝的提供這個網站供使用

Socket 基礎程式設計

在上一篇部落格中,我們總結了基本的Socket C/S結構的用法。但該例項僅僅限於1vs1的C/S互動中,當我們需要處理多對一的互動時,伺服器就必須支援併發處理。 我們知道在伺服器accept函式收到建聯請求後,會反饋一個新的fd用於與客戶端互動,此時通常我們

Java WebSocket程式設計:WebSocket實現主動推送互動

WebSocket協議 WebSocket協議通訊機制 WebSocket協議是獨立的、基於TCP的協議。其本質是先通過HTTP/HTTPS協議進行握手後建立一個用於交換資料的TCP連線,此後伺服器端與客戶器端通過此TCP連線進行實時通訊。 WebSocket開啟握手

網路程式設計---- MFC 仿QQ聊天軟體

今天來八一八,MFC的SOCKET 程式設計,利用CSocket實現一個基於TCP實現一個QQ聊天程式。你會發現,MFC要比WIN32 簡單的多。但是如果你不理解具體API socket基礎知識,你可能會覺得有一點費解。 所以在開始之前 我還是請大家先看看http://bl

java網路程式設計:12、基於UDPsocket程式設計程式碼通訊-簡單例項

宣告:本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用於商業用途,侵權必究!!! 文章目錄 一、基於UDP伺服器端程式的編寫 二、基於UDP客戶端程式的編寫 三、系列文章(java網路程式設計) 通過上篇文章瞭解了基於UDP通訊的理論、基本步驟以及它跟TCP的區別

java網路程式設計:9、基於TCP的socket程式設計伺服器端迴圈監聽接收多個客戶端_多執行緒伺服器程式

宣告:本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用於商業用途,侵權必究!!! 文章目錄 一、核心程式碼編寫 1、伺服器端程式的編寫 2、客戶端程式的編寫 3、測試列印輸出 二、系列文章(java網路程式設計) 上篇講了基於tcp的程式設計的一些基礎知識

網絡編程——TCP協議socket

cep 數據請求 b- aps pre alt 技術分享 隱藏 可靠 TCP協議與socket套接字 一、TCP協議 1、可靠傳輸,TCP數據包沒有長度限制,理論上可以無限長,但是為了保證網絡的效率,通常TCP數據包的長度不會超過IP數據包的長度,以確保單個TCP數據包不必