網(wǎng)絡(luò)通訊java代碼 網(wǎng)絡(luò)通信代碼

java代碼TCP/IP網(wǎng)絡(luò)通信服務(wù)器客戶端,實現(xiàn)雙方信息交互。

package?com.weixin.test;

成都創(chuàng)新互聯(lián)是一家專業(yè)提供蘭陵企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、網(wǎng)站制作、html5、小程序制作等業(yè)務(wù)。10年已為蘭陵眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。

import?java.io.IOException;

import?java.io.InputStream;

import?java.io.OutputStream;

import?java.net.InetAddress;

import?java.net.ServerSocket;

import?java.net.Socket;

import?org.junit.Test;

public?class?ScoketTest?{

@Test

public?void?client()?throws?Exception{

InetAddress?i=InetAddress.getByName("127.0.0.1");

Socket?s=new?Socket(i,?9000);

OutputStream?outputStream?=?s.getOutputStream();

outputStream.write("服務(wù)端你好,我是客戶端哦!".getBytes());

s.shutdownOutput();

InputStream?inputStream=s.getInputStream();

int?length=0;

byte[]?bytes=new?byte[1024];

while?((length=inputStream.read(bytes))!=-1)?{

System.err.println(new?String(bytes,0,length));

}

inputStream.close();

outputStream.close();

s.close();

}

@Test

public?void?server()?throws?Exception{

ServerSocket?serverSocket=new?ServerSocket(9000);

Socket?socket?=?serverSocket.accept();

InputStream?inputStream?=?socket.getInputStream();

OutputStream?outputStream?=?socket.getOutputStream();

int?length=0;

byte[]?bytes=new?byte[1024];

while?((length=inputStream.read(bytes))!=-1)?{

System.err.println(new?String(bytes,?0,length));

}

outputStream.write("客戶端你好,本王已收到!".getBytes());

outputStream.close();

inputStream.close();

socket.close();

serverSocket.close();

}

}

如何用java實現(xiàn)網(wǎng)絡(luò)通信

你說的我明白。如果真正使用alohal協(xié)議的時候,所有的機器都可以檢測網(wǎng)絡(luò)電平變化的是吧?但是使用Java編寫模擬程序的話,我們并不能可能檢測電平的變換,只能通過一定的手段來模擬這個過程。如果你將一個包裹群發(fā),這樣所有的機器都可以接受這個包,這樣就可以做到所有機器模擬檢測電平變化的這個要求。我認(rèn)為這個是最有說服力的模擬方法了。

線程需要使用Thread類型,重寫里面的run函數(shù),調(diào)用start()啟動線程,具體可以搜索一把Thread,例子遍地都是。

UDP協(xié)議使用Socket類型,初始化的時候參數(shù)里面綁定(或者初始化好以后直接調(diào)用bind綁定端口,一般輸出不用綁定,監(jiān)聽的時候需要綁定)。調(diào)用里面的getOutputStream得到輸入流。調(diào)用getInputStream得到輸入流。

OutputStream:輸出流,用于向網(wǎng)絡(luò)中輸出數(shù)據(jù)。調(diào)用其中的write函數(shù)進(jìn)行輸出,函數(shù)的參數(shù)就是輸出的byte數(shù)組。

InputStream: 輸入流,用于接受網(wǎng)絡(luò)里面的數(shù)據(jù)。調(diào)用其中的read可以得到輸入的包。

String:你要輸出的字符串,調(diào)用里面的getBytes可以得到String的byte數(shù)組。

其它的應(yīng)該用不到什么了吧。

**********************************

1.發(fā)送字符串的話用byte[]就可以啊。用Socket類里面的getOutputStream可以獲得一個發(fā)送數(shù)據(jù)的OutputStream類對象。這個類對象有一個函數(shù)write(byte[] b) 可以向網(wǎng)絡(luò)寫byte[]。一個字符串可以通過String類中的getBytes() 轉(zhuǎn)化成byte[]。這樣總該明白了吧

2.說一下我的思路:開一個端口A發(fā)送UDP包(廣播給端口B),用于模擬發(fā)送,用一個線程(線程1)來跑。開端口B接受局域網(wǎng)內(nèi)的包,用另外一個線程(線程2)來跑。在發(fā)送UDP包的時候,將變量mark置1,發(fā)送完置0。線程2如果接受到一個不是從本機發(fā)送的包,而且此時mark是1(說明本機和另外一個機器同時在發(fā)包),發(fā)生了沖突,表示線程1這次發(fā)送的包失敗。

使用Java編寫B(tài)/S網(wǎng)絡(luò)通信程序

網(wǎng)絡(luò)上的系統(tǒng)結(jié)構(gòu)多為客戶/服務(wù)器模式 服務(wù)器端負(fù)責(zé)數(shù)據(jù)和圖像等的存儲 維護(hù) 治理以及傳遞 客戶端則負(fù)責(zé)人機界面的操作 送出需求及顯示收回的數(shù)據(jù) 下面介紹一下如何使用Java來進(jìn)行網(wǎng)絡(luò)編程 ) 由于客戶端通過IE同服務(wù)器建立聯(lián)系 所以客戶端使用Applet 服務(wù)器端使用Application ) 服務(wù)器應(yīng)設(shè)置成多線程 應(yīng)答多個客戶的請求 ) 兩端通信使用SOCKET機制 Java中輸入/輸出流概念 過濾流DataInputStream 和DataOutputStream 除了分別作為FilterInputStream 和FilterOutputStream的子類外 還分別實現(xiàn)了接口DataInput 和DataOutput 接口DataInput 中定義的方法主要包括從流中讀取基本類型的數(shù)據(jù) 讀取一行數(shù)據(jù) 或者讀取指定長度的字節(jié)數(shù) 如readBoolean() readInt() readLine() readFully()等 接口DataOutput中定義的方法主要是向流中寫入基本類型的數(shù)據(jù)或者寫入一定長度的字節(jié)數(shù)組 如writeChar() writeDouble() DataInputStream可以從所連接的輸入流中讀取與機器無關(guān)的基本類型數(shù)據(jù) 用以實現(xiàn)一種獨立于具體平臺的輸入方式 DataInputStream 可以向所連接的輸出流寫入基本類型的數(shù)據(jù) Socket 機制 Socket是面向客戶/服務(wù)器模型設(shè)計的 網(wǎng)絡(luò)上的兩個程序通過一個雙向的通訊連接實現(xiàn)數(shù)據(jù)的交換 這個雙向鏈路的一端稱為一個Socket Socket通常用來實現(xiàn)客戶方和服務(wù)方的連接 客戶程序可以向Socket寫請求 服務(wù)器將處理此請求 然后通過Socket將結(jié)果返回給用戶 Socket通信機制提供了兩種通訊方式 有聯(lián)接和無聯(lián)接方式 分別面向不同的應(yīng)用需求 使用有聯(lián)接方式時 通信鏈路提供了可靠的 全雙工的字節(jié)流服務(wù) 在該方式下 通信雙方必須創(chuàng)建一個聯(lián)接過程并建立一條通訊鏈路 以后的網(wǎng)絡(luò)通信操作完全在這一對進(jìn)程之間進(jìn)行 通信完畢關(guān)閉此聯(lián)接過程 使用無聯(lián)接方式時其系統(tǒng)開銷比無聯(lián)接方式小 但通信鏈路提供了不可靠的數(shù)據(jù)報服務(wù) 不能保證信源所傳輸?shù)臄?shù)據(jù)一定能夠到達(dá)信宿 在該方式下 通信雙方不必創(chuàng)建一個聯(lián)接過程和建立一條通訊鏈路 網(wǎng)絡(luò)通信操作在不同的主機和進(jìn)程之間轉(zhuǎn)發(fā)進(jìn)行 Java語言簡介Java語言的優(yōu)點主要表現(xiàn)在 簡單 面向?qū)ο?多線程 分布性 體系結(jié)構(gòu)中立 安全性等方面 ( ) 簡單性Java與C++語言非常相近 但Java比C++簡單 它拋棄了C++中的一些不是絕對必要的功能 如頭文件 預(yù)處理文件 指針 結(jié)構(gòu) 運算符重載 多重繼續(xù)以及自動強迫同型 Java實現(xiàn)了自動的垃圾收集 簡化了內(nèi)存治理的工作 這使程序設(shè)計更加簡便 同時減少了出錯的可能 ( ) 面向?qū)ο驤ava提供了簡單的類機制和動態(tài)的構(gòu)架模型 對象中封裝了它的狀態(tài)變量和方法 很好地實現(xiàn)了模塊化和信息隱藏 而類則提供了一類對象的原型 通過繼續(xù)和重載機制 子類可以使用或重新定義父類或超類所提供的方法 從而既實現(xiàn)了代碼的復(fù)用 又提供了一種動態(tài)的解決方案 Java是一種完全面向?qū)ο蟮某绦蛟O(shè)計語言 它除了數(shù)組 布爾和字符三個基本數(shù)據(jù)類型外的其它類都是對象 它不再支持全局變量 在Java中 假如不創(chuàng)建新類就無法創(chuàng)建程序 Java程序在運行時必須先創(chuàng)建一個類的實例 然后才能提交運行 Java同樣支持繼續(xù)特性 Java的類可以從其它類中繼續(xù)行為 但Java只支持類的單重繼續(xù) 即每個類只能從一個類中繼續(xù) Java支持界面 界面答應(yīng)程序員定義方法但又不立即實現(xiàn) 一個類可以實現(xiàn)多個界面 利用界面可以得到多重繼續(xù)的許多優(yōu)點而又沒有多重繼續(xù)的問題 ( ) 多線程多線程使應(yīng)用程序可以同時進(jìn)行不同的操作 處理不同的事件 在多線程機制中 不同的線程處理不同的任務(wù) 他們之間互不干涉 不會由于一處等待影響其他部分 這樣輕易實現(xiàn)網(wǎng)絡(luò)上的實時交互操作 Java程序可以有多個執(zhí)行線程 如可以讓一個線程進(jìn)行復(fù)雜的計算 而讓另一個線程與用戶進(jìn)行交互 這樣用戶可以在不中斷計算線程的前提下與系統(tǒng)進(jìn)行交互 多線程保證了較高的執(zhí)行效率 ( ) 分布性Java是面向網(wǎng)絡(luò)的語言 通過它提供的類庫可以處理TCP/IP協(xié)議 用戶可以通過URL地址在網(wǎng)絡(luò)上很方便的訪問其他對象 ( ) 體系結(jié)構(gòu)中立Java是一種網(wǎng)絡(luò)語言 為使Java程序能在網(wǎng)絡(luò)的任何地方運行 Java解釋器生成與體系結(jié)構(gòu)無關(guān)的字節(jié)碼結(jié)構(gòu)的文件格式 Java為了做到結(jié)構(gòu)中立 除生成機器無關(guān)的字節(jié)碼外 還制定了完全統(tǒng)一的語言文本 如Java的基本數(shù)據(jù)類型不會隨目標(biāo)機的變化而變化 一個整型總是 位 一個長整型總是 位 為了使Java的應(yīng)用程序能不依靠于具體的系統(tǒng) Java語言環(huán)境還提供了用于訪問底層操作系統(tǒng)功能的類組成的包 當(dāng)程序使用這些包時 可以確保它能運行在各種支持Java的平臺上 lishixinzhi/Article/program/Java/hx/201311/25926

用JAVA 編寫簡單網(wǎng)絡(luò)聊天程序

/**

* 基于UDP協(xié)議的聊天程序

*

* 2007.9.18

* */

//導(dǎo)入包

import java.awt.*;

import java.awt.event.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.*;

import java.net.*;

public class Chat extends JFrame implements ActionListener

{

//廣播地址或者對方的地址

public static final String sendIP = "172.18.8.255";

//發(fā)送端口9527

public static final int sendPort = 9527;

JPanel p = new JPanel();

List lst = new List(); //消息顯示

JTextField txtIP = new JTextField(18); //填寫IP地址

JTextField txtMSG = new JTextField(20); //填寫發(fā)送消息

JLabel lblIP = new JLabel("IP地址:");

JLabel lblMSG = new JLabel("消息:");

JButton btnSend = new JButton("發(fā)送");

byte [] buf;

//定義DatagramSocket的對象必須進(jìn)行異常處理

//發(fā)送和接收數(shù)據(jù)報包的套接字

DatagramSocket ds = null;

//=============構(gòu)造函數(shù)=====================

public Chat()

{

CreateInterFace();

//注冊消息框監(jiān)聽器

txtMSG.addActionListener(this);

btnSend.addActionListener(this);

try

{

//端口:9527

ds =new DatagramSocket(sendPort);

}

catch(Exception ex)

{

ex.printStackTrace();

}

//============接受消息============

//匿名類

new Thread(new Runnable()

{

public void run()

{

byte buf[] = new byte[1024];

//表示接受數(shù)據(jù)報包

while(true)

{

try

{

DatagramPacket dp = new DatagramPacket(buf,1024,InetAddress.getByName(txtIP.getText()),sendPort);

ds.receive(dp);

lst.add("【消息來自】◆" + dp.getAddress().getHostAddress() + "◆"+"【說】:" + new String (buf,0,dp.getLength()) /*+ dp.getPort()*/,0);

}

catch(Exception e)

{

if(ds.isClosed())

{

e.printStackTrace();

}

}

}

}

}).start();

//關(guān)閉窗體事件

this.addWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent w)

{

System.out.println("test");

int n=JOptionPane.showConfirmDialog(null,"是否要退出?","退出",JOptionPane.YES_NO_OPTION);

if(n==JOptionPane.YES_OPTION)

{

dispose();

System.exit(0);

ds.close();//關(guān)閉ds對象//關(guān)閉數(shù)據(jù)報套接字

}

}

});

}

//界面設(shè)計布局

public void CreateInterFace()

{

this.add(lst,BorderLayout.CENTER);

this.add(p,BorderLayout.SOUTH);

p.add(lblIP);

p.add(txtIP);

p.add(lblMSG);

p.add(txtMSG);

p.add(btnSend);

txtIP.setText(sendIP);

//背景顏色

lst.setBackground(Color.yellow);

//JAVA默認(rèn)風(fēng)格

this.setUndecorated(true);

this.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);

this.setSize(600,500);

this.setTitle("〓聊天室〓");

this.setResizable(false);//不能改變窗體大小

this.setLocationRelativeTo(null);//窗體居中

this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

this.setVisible(true);

txtMSG.requestFocus();//消息框得到焦點

}

//===============================Main函數(shù)===============================

public static void main(String[]args)

{

new Chat();

}

//================================發(fā)送消息===============================

//消息框回車發(fā)送消息事件

public void actionPerformed(ActionEvent e)

{

//得到文本內(nèi)容

buf = txtMSG.getText().getBytes();

//判斷消息框是否為空

if (txtMSG.getText().length()==0)

{

JOptionPane.showMessageDialog(null,"發(fā)送消息不能為空","提示",JOptionPane.WARNING_MESSAGE);

}

else{

try

{

InetAddress address = InetAddress.getByName(sendIP);

DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName(txtIP.getText()),sendPort);

ds.send(dp);

}

catch(Exception ex)

{

ex.printStackTrace();

}

}

txtMSG.setText("");//清空消息框

//點發(fā)送按鈕發(fā)送消息事件

if(e.getSource()==btnSend)

{

buf = txtMSG.getText().getBytes();

try

{

DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName(txtIP.getText()),sendPort);

}

catch(Exception ex)

{

ex.printStackTrace();

}

txtMSG.setText("");//清空消息框

txtMSG.requestFocus();

}

}

}

用Java編寫簡單的UDP網(wǎng)絡(luò)通信程序

Java中封裝了大量的socket API 為編寫網(wǎng)絡(luò)通信程序提供了極大的方便 在計算機網(wǎng)絡(luò)的學(xué)習(xí)中 大家都已熟練掌握了TCP/UDP的基本原理 在此不在贅述 僅給出接收端和發(fā)送端的源代碼 供大家討論學(xué)習(xí) 發(fā)送端代碼如下:import java io *;import java lang *;import *;public class uclient{private DatagramSocket cli;private DatagramPacket pac;private byte *** [];private String sen;public uclient(){Init();}public void Init(){try{//指定端口號 避免與其他應(yīng)用程序發(fā)生沖突cli=new DatagramSocket( ); *** =new byte[ ];sen= UDP方式發(fā)送數(shù)據(jù) ; *** =sen getBytes();pac=new DatagramPacket( *** *** length InetAddress getByName( localhost ) );cli send(pac);}catch(SocketException se){se printStackTrace();}catch(IOException ie){ie printStackTrace();}}public static void main(String args[]){new uclient();}}接收端數(shù)據(jù):import java io *;import java lang *;import *;public class userve{private DatagramSocket ser;private DatagramPacket pac;private byte rb[];private String rev;public userve(){Init();}public void Init(){try{ser=new DatagramSocket( );rb=new byte[ ];pac=new DatagramPacket(rb rb length);rev= ;int i= ;while(i== )//無數(shù)據(jù) 則循環(huán){ser receive(pac);i=pac getLength();//接收數(shù)據(jù)if(i ){//指定接收到數(shù)據(jù)的長度 可使接收數(shù)據(jù)正常顯示 開始時很容易忽略這一點rev=new String(rb pac getLength());System out println(rev);i= ;//循環(huán)接收}}}catch(Exception e){e printStackTrace();}}public static void main(String args[]){new userve();}} lishixinzhi/Article/program/Java/hx/201311/26023

當(dāng)前文章:網(wǎng)絡(luò)通訊java代碼 網(wǎng)絡(luò)通信代碼
文章鏈接:http://www.muchs.cn/article24/doodoje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機標(biāo)簽優(yōu)化、網(wǎng)站制作、定制網(wǎng)站自適應(yīng)網(wǎng)站、App設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司