最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Java含個(gè)人認(rèn)為很重要的個(gè)人理解和提醒:服務(wù)器,網(wǎng)絡(luò)編程,UDP【詩(shī)書(shū)畫(huà)唱】

2020-08-07 00:31 作者:詩(shī)書(shū)畫(huà)唱  | 我要投稿


網(wǎng)絡(luò)編程概述:

網(wǎng)絡(luò)編程三要素,

UDP編程,

TCP編程。



打印出自己的IP地址



package getIP;

import java.net.*;

public class getIP{

public?

static void main(String[] args) throws Exception{

//

// 下面“DESKTOP-HSPHJ7O”是

// 我自己電腦的IP,這個(gè)只能打印出自己的IP地址

InetAddress ia= InetAddress.getByName("DESKTOP-HSPHJ7O");

System . out. println(ia.getHostAddress());

}

}





?ipconfig: 查看本機(jī)IP地址

netstat -an:查看本機(jī)占用的端口號(hào)










1.使用UDP傳入“我愛(ài)我的祖國(guó)”到服務(wù)器


package getIP;


import java.net.*;

public class UDPFuWuDuan {

//個(gè)人的總結(jié):

//想要寫(xiě)服務(wù)端的話就要先:1.創(chuàng)建接收Socket對(duì)象容器(DatagramSocket)

//2.用DatagramPacket創(chuàng)建一個(gè)數(shù)據(jù)包(接收數(shù)據(jù))

// 3.調(diào)用Socket對(duì)象接收方法(DatagramSocket.receive),接收數(shù)據(jù)

// 4.用byte[]和String(byteArray,0,length)解析數(shù)據(jù)包

// 5.用DatagramSocket.close()釋放資源。

public static void main(String[] args) throws Exception{

System.out.println("服務(wù)器端啟動(dòng)");

// 1.創(chuàng)建接收Socket對(duì)象容器:

// datagram: 數(shù)據(jù)包;?

// socket 英[?s?k?t]

// 美[?sɑ?k?t]

// n. (電源) 插座; (電器上的) 插口,

// 插孔,管座; 托座; 孔穴; 窩; 槽; 臼;

// vt. 把…裝入插座; 給…配插座;

// DatagramSocket(int port)

// 構(gòu)建一個(gè)數(shù)據(jù)報(bào)套接字,綁定到本地主機(jī)的指定端口:

DatagramSocket DatagramSocket=

new DatagramSocket(22222);

//:22222為服務(wù)端的端口號(hào)

// 2.創(chuàng)建一個(gè)數(shù)據(jù)包(接收數(shù)據(jù)):

byte[] byteShuZu=new byte[1024*60];

DatagramPacket DatagramPacket=new DatagramPacket

(byteShuZu,0,byteShuZu.length);

// 3.調(diào)用Socket對(duì)象接收方法接收數(shù)據(jù):

System.out.println("服務(wù)器正在耐心的等待接收數(shù)據(jù)");

DatagramSocket.receive(DatagramPacket);//:接收快遞


System.out.println("——————");

System.out.println("服務(wù)器已經(jīng)接收到客戶端發(fā)來(lái)的數(shù)據(jù)了,"

+ "接收到的數(shù)據(jù)的內(nèi)容為:");

// 4.解析數(shù)據(jù)包:

byte[] byteArray=DatagramPacket.getData();

//:得到發(fā)送的字節(jié)數(shù)組。

// 下面是打印客戶端發(fā)來(lái)的數(shù)據(jù):

int length=DatagramPacket.getLength();//:接收長(zhǎng)度

String String=new String(byteArray,0,length);

System.out.println(String);

// 5.釋放資源:

DatagramSocket.close();



}



}




package getIP;

import java.net.*;

public class UDPKeHuDuan {

public static void main(String[] args) throws Exception{

System.out.println("客戶端啟動(dòng)了");

// ——————

// 個(gè)人的總結(jié):

// 客戶端一般是發(fā)送數(shù)據(jù)的,

// 而服務(wù)端一般是接收數(shù)據(jù)的。

// 客戶端和服務(wù)端分別是兩個(gè)Java文件,可以分別寫(xiě)到

// 兩臺(tái)不同的電腦,進(jìn)行互相地聊天,交流,

// 傳輸數(shù)據(jù)。

// 要先開(kāi)啟(執(zhí)行)服務(wù)端,再開(kāi)啟客戶端,這樣才有用。

// 寫(xiě)客戶端時(shí)先要:

// 1.創(chuàng)建發(fā)送數(shù)據(jù)Socket對(duì)象(里面的參數(shù)是你發(fā)送端的端口號(hào)

// ,就是自己設(shè)置聲明的端口號(hào),

// 一般是要大于10000。)

// 2.創(chuàng)建數(shù)據(jù)(一般通過(guò)聲明String或用Scanner接收等的方式

// 來(lái)創(chuàng)建數(shù)據(jù),類(lèi)型不定),用聲明byte[]和getBytes()

// 來(lái)將String等轉(zhuǎn)換為字節(jié),并用DatagramPacket將數(shù)據(jù)打包,

// DatagramPacket

// (byteArray,byteArray.length,

// new InetSocketAddress("127.0.0.1",22222))

// 中的參數(shù)依次為字節(jié)數(shù)組,字節(jié)數(shù)組的長(zhǎng)度,

// 實(shí)例化一個(gè)InetSocketAddress("127.0.0.1",22222)

// 。InetSocketAddress("127.0.0.1",22222)

// 中的參數(shù)分別為127.0.0.1(代表本機(jī))

// ,服務(wù)端(別的要進(jìn)行聯(lián)機(jī)的電腦)的

// 端口號(hào)名(比如這里的22222)。

// ——————

// 多去用一些比喻等來(lái)描述一些過(guò)程,概念等,

// 會(huì)讓聽(tīng)者(包括提出比喻者自己)感到更有趣等。

// ————

// 這個(gè)發(fā)送數(shù)據(jù)的過(guò)程就像是送(退)快遞(貨)的過(guò)程,

// 1.創(chuàng)建發(fā)送數(shù)據(jù)Socket對(duì)象(指定是哪個(gè)快遞員去送快遞)

// 。2.創(chuàng)建數(shù)據(jù),并將數(shù)據(jù)打包(客戶買(mǎi)了的東西,

// 快遞員將要送的東西打包,了解要送的目的地)。

// 3.調(diào)用Socket發(fā)送的方法發(fā)送數(shù)據(jù)(用騎電動(dòng)車(chē)或其他的方法把快遞

// 送到賣(mài)家(服務(wù)端)那里。4.釋放資源(賣(mài)家把錢(qián)退給買(mǎi)家,

// 也就是說(shuō)賣(mài)家把錢(qián)退給客戶)

// ——————

// DatagramSocket(int port):

// 構(gòu)建一個(gè)數(shù)據(jù)報(bào)套接字,綁定到本地主機(jī)的指定端口

// ——————

// 發(fā)送數(shù)據(jù):

// 1.創(chuàng)建發(fā)送數(shù)據(jù)Socket對(duì)象(里面的參數(shù)是

// 你發(fā)送端(客戶端)的端口號(hào)):

DatagramSocket DatagramSocket

=new DatagramSocket(11111);//:快遞員


// 2.創(chuàng)建數(shù)據(jù),并將數(shù)據(jù)打包:


String String="我愛(ài)我的祖國(guó)";//:你要發(fā)送的數(shù)據(jù),發(fā)快遞

byte[] byteArray=String.getBytes();//:將數(shù)據(jù)轉(zhuǎn)為字節(jié)

//快遞打包:

DatagramPacket DatagramPacket=new DatagramPacket

(byteArray,byteArray.length,

new InetSocketAddress("127.0.0.1",22222));

// 3.調(diào)用Socket發(fā)送的方法發(fā)送數(shù)據(jù):

DatagramSocket.send(DatagramPacket);//:發(fā)快遞

// 4.釋放資源:

DatagramSocket.close();//:休息

}


}







2.客戶端提示用戶輸入“hello,world”到服務(wù)器端,如果輸入的內(nèi)容不對(duì)
提示,輸入錯(cuò)誤,如果輸入正確提示輸入正確



package getIP;


import java.net.*;

public class HelloWorldFuWuDuan {

//個(gè)人的總結(jié):

//想要寫(xiě)服務(wù)端的話就要先:1.創(chuàng)建接收Socket對(duì)象容器(DatagramSocket)

//2.用DatagramPacket創(chuàng)建一個(gè)數(shù)據(jù)包(接收數(shù)據(jù))

// 3.調(diào)用Socket對(duì)象接收方法(DatagramSocket.receive),接收數(shù)據(jù)

// 4.用byte[]和String(byteArray,0,length)解析數(shù)據(jù)包

// 5.用DatagramSocket.close()釋放資源。

public static void main(String[] args) throws Exception{

System.out.println("服務(wù)器端啟動(dòng)");

// 1.創(chuàng)建接收Socket對(duì)象容器:

// datagram: 數(shù)據(jù)包;?

// socket 英[?s?k?t]

// 美[?sɑ?k?t]

// n. (電源) 插座; (電器上的) 插口,

// 插孔,管座; 托座; 孔穴; 窩; 槽; 臼;

// vt. 把…裝入插座; 給…配插座;

// DatagramSocket(int port)

// 構(gòu)建一個(gè)數(shù)據(jù)報(bào)套接字,綁定到本地主機(jī)的指定端口:

DatagramSocket DatagramSocket=

new DatagramSocket(22226);

// ——————

// 個(gè)人提醒:

// //:22226為服務(wù)端的端口號(hào),每一對(duì)服務(wù)端和客戶端的端口號(hào)

// 都不能相同也都不 能太小或太大(比如222226就是

// 太大的“端口號(hào)”),不然就會(huì)報(bào)錯(cuò)。

// ————

// 2.創(chuàng)建一個(gè)數(shù)據(jù)包(接收數(shù)據(jù)):

byte[] byteShuZu=new byte[1024*60];

DatagramPacket DatagramPacket=new DatagramPacket

(byteShuZu,0,byteShuZu.length);

// 3.調(diào)用Socket對(duì)象接收方法接收數(shù)據(jù):

System.out.println("服務(wù)器正在耐心的等待接收數(shù)據(jù)");

DatagramSocket.receive(DatagramPacket);//:接收快遞


System.out.println("——————");

System.out.println("服務(wù)器已經(jīng)接收到客戶端發(fā)來(lái)的數(shù)據(jù)了,"

+ "接收到的數(shù)據(jù)的內(nèi)容為:");

// 4.解析數(shù)據(jù)包:

byte[] byteArray=DatagramPacket.getData();

//:得到發(fā)送的字節(jié)數(shù)組。

// 下面是打印客戶端發(fā)來(lái)的數(shù)據(jù):

int length=DatagramPacket.getLength();//:接收長(zhǎng)度

String String=new String(byteArray,0,length);

System.out.println(String);


if(String.equals("hello,world")){


System.out.println("輸入正確");


}

else {



System.out.println("輸入錯(cuò)誤");

}

// 5.釋放資源:

DatagramSocket.close();



}



}


package getIP;

import java.net.*;

import java.util.Scanner;

public class HelloWorldKeHuDuan {

public static void main(String[] args) throws Exception{

System.out.println("客戶端啟動(dòng)了,"

+ "請(qǐng)接下來(lái)輸入“hello,world”\n"

+ ",這樣的話這個(gè)數(shù)據(jù)就會(huì)發(fā)送到"

+ "服務(wù)端");

// ——————

// 個(gè)人的總結(jié):

// 客戶端一般是發(fā)送數(shù)據(jù)的,

// 而服務(wù)端一般是接收數(shù)據(jù)的。

// 客戶端和服務(wù)端分別是兩個(gè)Java文件,可以分別寫(xiě)到

// 兩臺(tái)不同的電腦,進(jìn)行互相地聊天,交流,

// 傳輸數(shù)據(jù)。

// 要先開(kāi)啟(執(zhí)行)服務(wù)端,再開(kāi)啟客戶端,這樣才有用。

// 寫(xiě)客戶端時(shí)先要:

// 1.創(chuàng)建發(fā)送數(shù)據(jù)Socket對(duì)象(里面的參數(shù)是你發(fā)送端的端口號(hào)

// ,就是自己設(shè)置聲明的端口號(hào),

// 一般是要大于10000。)

// 2.創(chuàng)建數(shù)據(jù)(一般通過(guò)聲明String或用Scanner接收等的方式

// 來(lái)創(chuàng)建數(shù)據(jù),類(lèi)型不定),用聲明byte[]和getBytes()

// 來(lái)將String等轉(zhuǎn)換為字節(jié),并用DatagramPacket將數(shù)據(jù)打包,

// DatagramPacket

// (byteArray,byteArray.length,

// new InetSocketAddress("127.0.0.1",22222))

// 中的參數(shù)依次為字節(jié)數(shù)組,字節(jié)數(shù)組的長(zhǎng)度,

// 實(shí)例化一個(gè)InetSocketAddress("127.0.0.1",22222)

// 。InetSocketAddress("127.0.0.1",22222)

// 中的參數(shù)分別為127.0.0.1(代表本機(jī))

// ,服務(wù)端(別的要進(jìn)行聯(lián)機(jī)的電腦)的

// 端口號(hào)名(比如這里的22222)。

// ——————

// 多去用一些比喻等來(lái)描述一些過(guò)程,概念等,

// 會(huì)讓聽(tīng)者(包括提出比喻者自己)感到更有趣等。

// ————

// 這個(gè)發(fā)送數(shù)據(jù)的過(guò)程就像是送(退)快遞(貨)的過(guò)程,

// 1.創(chuàng)建發(fā)送數(shù)據(jù)Socket對(duì)象(指定是哪個(gè)快遞員去送快遞)

// 。2.創(chuàng)建數(shù)據(jù),并將數(shù)據(jù)打包(客戶買(mǎi)了的東西,

// 快遞員將要送的東西打包,了解要送的目的地)。

// 3.調(diào)用Socket發(fā)送的方法發(fā)送數(shù)據(jù)(用騎電動(dòng)車(chē)或其他的方法把快遞

// 送到賣(mài)家(服務(wù)端)那里。4.釋放資源(賣(mài)家把錢(qián)退給買(mǎi)家,

// 也就是說(shuō)賣(mài)家把錢(qián)退給客戶)

// ——————

// DatagramSocket(int port):

// 構(gòu)建一個(gè)數(shù)據(jù)報(bào)套接字,綁定到本地主機(jī)的指定端口

// ——————

// 發(fā)送數(shù)據(jù):

// 1.創(chuàng)建發(fā)送數(shù)據(jù)Socket對(duì)象(里面的參數(shù)是你

// 發(fā)送端(客戶端)的端口號(hào)):

DatagramSocket DatagramSocket

=new DatagramSocket(11116);//:快遞員


// 2.創(chuàng)建數(shù)據(jù),并將數(shù)據(jù)打包:

Scanner s=new Scanner(System.in);


String String=s.next();

// String String="我愛(ài)我的祖國(guó)";

//:你要發(fā)送的數(shù)據(jù),發(fā)快遞

byte[] byteArray=String.getBytes();//:將數(shù)據(jù)轉(zhuǎn)為字節(jié)

//快遞打包:

DatagramPacket DatagramPacket=new DatagramPacket

(byteArray,byteArray.length,

new InetSocketAddress("127.0.0.1",22226));

// 3.調(diào)用Socket發(fā)送的方法發(fā)送數(shù)據(jù):

DatagramSocket.send(DatagramPacket);//:發(fā)快遞

// 4.釋放資源:

DatagramSocket.close();//:休息

}


}




會(huì)有中文亂碼等(要鼠標(biāo)右鍵點(diǎn)最后一個(gè)來(lái)統(tǒng)一改成一種編碼格式等,比如UTF-8等)





3.定義用戶類(lèi),該類(lèi)實(shí)現(xiàn)序列化接口,定義屬性u(píng)name,pwd,
提示用戶輸入用戶名和密碼保存到對(duì)應(yīng)的屬性中,將內(nèi)容使用對(duì)象
傳入到服務(wù)器端,解析傳入的用戶名和密碼,如果用戶名是王大錘密碼
是張三豐就登錄成功,否則登錄失敗


package getIP;


import java.net.*;

public class dengLuFuWuDuan {

public static void main(String[] args) throws Exception{

System.out.println("服務(wù)器端啟動(dòng)");

DatagramSocket DatagramSocket

=new DatagramSocket(23456);

byte[] byteArray=new byte[1026];

DatagramPacket DatagramPacket

=new DatagramPacket(byteArray,byteArray.length);

DatagramSocket.receive(DatagramPacket);

byte[] byteShuZu=DatagramPacket.getData();

int length=DatagramPacket.getLength();

String String= new String(byteShuZu,0,length);

// 之前在客戶端用“:”(String String=uname+":"+pwd;)

// ,在這里和split(用于以split("XXX")中的"XXX"

// 為分割線來(lái)分割字符串)配合用,就有很大的作用了,可以把

// 用戶在客戶端輸入的用戶名和密碼分割,

// 成String數(shù)組中的第一個(gè)內(nèi)容

// (StringArra[0])和第二個(gè)內(nèi)容(StringArra[1])。


String[] StringArray=String.split(":");


if(StringArray[0].trim().equals("王大錘")

&&StringArray[1].trim().equals("張三豐")){

System.out.println("登錄成功");

}else {

System.out.println("登錄失敗");

}

DatagramSocket.close();


}


}

package getIP;

import java.io.ByteArrayOutputStream;

import java.io.ObjectOutputStream;

import java.io.Serializable;

import java.net.*;

import java.util.Scanner;

public class dengLuKeHuDuan {

public static void main(String[] args) throws Exception{

//將字符串換為float或者Object

//ByteArrayOutputStream:將內(nèi)容可以轉(zhuǎn)為字節(jié)的流

// ObjectOutputStream:對(duì)象必須序列化,另外對(duì)象也要轉(zhuǎn)為字節(jié)流

System.out.println("客戶端啟動(dòng)了");

System.out.println("提示:如果用戶名是王大錘,"

+ "\n密碼是張三豐就登錄成功,否則登錄失敗");

Scanner s=new Scanner(System.in);


System.out.println("請(qǐng)輸入你的用戶名");

String uname=s.next();

System.out.println("請(qǐng)輸入你的密碼");

String pwd=s.next();

DatagramSocket DatagramSocket

=new DatagramSocket(12345);

String String=uname+":"+pwd;

DatagramPacket DatagramPacket=new

DatagramPacket(String.getBytes(),

String.getBytes().length,

new InetSocketAddress(


// localhost表示本機(jī)

"localhost",23456));

DatagramSocket.send(DatagramPacket);

DatagramSocket.close();


}

}

//Serializable:

//Serializable接口是java提供的通用數(shù)據(jù)保存和讀取的接口。

//功能 :

//實(shí)現(xiàn)java.io.Serializable 。

//

//作用 :

//標(biāo)識(shí)可序列化的語(yǔ)義。

//

//SERIALIZABLE: 序列化可串行化可序列化串行化。

//serializable

//adj. 可串行化的。

class yongHu implements Serializable{


}








4.使用upd傳入一張圖片到服務(wù)器,服務(wù)器解析圖片到項(xiàng)目的根目錄中


package getIP;


import java.io.*;

import java.net.*;

import java.util.Scanner;

public class UdpImgfuWuDuan {

public static void main(String[] args) throws Exception{


System.out.println("服務(wù)器啟動(dòng)了 ");

DatagramSocket DatagramSocket=new DatagramSocket(54321);

//創(chuàng)建接收數(shù)據(jù)的容器:

byte[] byteArray1=new byte[1024*60];

DatagramPacket DatagramPacket=

new DatagramPacket(byteArray1, byteArray1.length);

//堵塞性的接收數(shù)據(jù):

System.out.println("服務(wù)器正在等待用戶發(fā)送圖片");

DatagramSocket.receive(DatagramPacket);

System.out.println("服務(wù)器接收了用戶發(fā)送的圖片");

//解析數(shù)據(jù)包:

byte[] byteArray2=DatagramPacket.getData();

int len1=DatagramPacket.getLength();

//將解析后的字節(jié)數(shù)組再轉(zhuǎn)回圖片:

ByteArrayInputStream ByteArrayInputStream=

new ByteArrayInputStream(byteArray2,0,len1);

FileOutputStream FileOutputStream=

new FileOutputStream("客戶端發(fā)送的3.jpg");

//遍歷byte數(shù)組:

byte [] byteArray3=new byte[1024];

int len2;

while((len2=ByteArrayInputStream.read(byteArray3))!=-1){

FileOutputStream.write(byteArray3,0,len2);

}

FileOutputStream.flush();

FileOutputStream.close();ByteArrayInputStream.close();

DatagramSocket.close();



}




}


package getIP;


import java.util.*;

import java.io.*;

import java.net.*;



public class UdpImgkeHuDuan {

public static void main(String[] args)throws Exception {


// 4.使用upd傳入一張圖片到服務(wù)器,服務(wù)器解析圖片到項(xiàng)目的根目錄中

// disiti();

//創(chuàng)建發(fā)送數(shù)據(jù)的對(duì)象

System.out.println("客戶端啟動(dòng)");

DatagramSocket DatagramSocket=new DatagramSocket(12345);

//得到發(fā)送的數(shù)據(jù)并打包

FileInputStream FileInputStream=new FileInputStream("3.jpg");

ByteArrayOutputStream ByteArrayOutputStream

=new ByteArrayOutputStream();

//在讀圖片的同時(shí)將讀取的內(nèi)容寫(xiě)入到byte字節(jié)流里

byte[] byteArray1=new byte[1024];

int len;

while((len=FileInputStream.read(byteArray1))!=-1){

ByteArrayOutputStream.write(byteArray1,0,len);

}

ByteArrayOutputStream.flush();

byte[] byteArray2=ByteArrayOutputStream.toByteArray();

//將讀取的數(shù)據(jù)轉(zhuǎn)為字節(jié)數(shù)組

DatagramPacket DatagramPacket=new?

DatagramPacket(byteArray2,byteArray2.length,

new InetSocketAddress("localhost",54321));

//發(fā)送數(shù)據(jù)

DatagramSocket.send(DatagramPacket);

DatagramSocket.close();


}


}



鼠標(biāo)右鍵刷新后:





5.在第三題的基礎(chǔ)上判斷用戶名和密碼是否正確,正確則服務(wù)器向客戶端
發(fā)送內(nèi)容,登錄成功,客戶端接收服務(wù)器發(fā)送的內(nèi)容,錯(cuò)誤則發(fā)送登錄失敗
也是由客戶端進(jìn)行接收服務(wù)器發(fā)送的內(nèi)容



package dengLu;


import java.io.*;

import java.net.*;

import java.util.Scanner;

public class fuWuDuan {

public static void main(String[] args) throws Exception{


fuWuDuanFangFa();


}


private static void fuWuDuanFangFa() throws?

SocketException, IOException,

ClassNotFoundException {

System.out.println("UDP的服務(wù)器端開(kāi)啟了"

+ "用戶名和密碼都為"

+ "“給詩(shī)書(shū)畫(huà)唱三連關(guān)注”");

DatagramSocket DatagramSocket

=new DatagramSocket(27222);

byte[] byteArray1=new byte[1024];

DatagramPacket DatagramPacket1=new?

DatagramPacket(byteArray1,byteArray1.length);

DatagramSocket.receive(DatagramPacket1);

//:堵塞性的接收內(nèi)容

byte[] byteArray2=DatagramPacket1.getData();

int len2=DatagramPacket1.getLength();

ByteArrayInputStream ByteArrayInputStream2=new?

ByteArrayInputStream(byteArray2,0,len2);

ObjectInputStream ObjectInputStream=new?

ObjectInputStream(ByteArrayInputStream2);

yongHuClass yongHuClass=(yongHuClass)

ObjectInputStream.readObject();

if(yongHuClass.uname.trim().

equals("給詩(shī)書(shū)畫(huà)唱三連關(guān)注")

&&yongHuClass.pwd.trim()

.equals("給詩(shī)書(shū)畫(huà)唱三連關(guān)注")){

String String="登錄成功";

DatagramPacket DatagramPacket=

new DatagramPacket(String.getBytes(),

String.getBytes().length,new?

InetSocketAddress("localhost",17111));

DatagramSocket.send(DatagramPacket);

}else{

String StringFalse="登錄失敗";

DatagramPacket DatagramPacketFalse=new DatagramPacket

(StringFalse.getBytes(),

StringFalse.getBytes().length,

new InetSocketAddress("localhost",17111));

DatagramSocket.send(DatagramPacketFalse);

}

DatagramSocket.close();

}}



package dengLu;


import java.util.*;

import java.io.*;

import java.net.*;



public class keHuDuan {

public static void main(String[] args)throws Exception {


keHuDuanFangFa();


}



private static void keHuDuanFangFa() throws?

SocketException, IOException {

System.out.println("UDP的客戶端開(kāi)啟了");

Scanner s=new Scanner(System.in);

System.out.println("請(qǐng)輸入用戶名");

String uname=s.next();

System.out.println("請(qǐng)輸入用戶密碼");

String pwd=s.next();

yongHuClass yongHuClass=new yongHuClass(uname,pwd);

DatagramSocket DatagramSocket

=new DatagramSocket(17111);

ByteArrayOutputStream ByteArrayOutputStream=

new ByteArrayOutputStream();

ObjectOutputStream ObjectOutputStream=

new ObjectOutputStream(ByteArrayOutputStream);

ObjectOutputStream.writeObject(yongHuClass);

byte[] byteArray1=ByteArrayOutputStream.toByteArray();

DatagramPacket DatagramPacket1

=new DatagramPacket(byteArray1,byteArray1.length

,new InetSocketAddress("localhost",27222));

DatagramSocket.send(DatagramPacket1);

byte[] byteArray2=new byte[1024*60];

DatagramPacket DatagramPacket2=new DatagramPacket

(byteArray2,byteArray2.length);

DatagramSocket.receive(DatagramPacket2);

byte[] byteArray3=DatagramPacket2.getData();

int len3=DatagramPacket2.getLength();

String StringPrintOut=new String(byteArray3,0,len3);

System.out.println(StringPrintOut);

DatagramSocket.close();

}



}

//用戶類(lèi):

class yongHuClass implements Serializable{

String uname,pwd;

public yongHuClass(String uname,String pwd){

this.uname=uname;

this.pwd=pwd;

}

@Override

public String toString() {

return "yonghu [uname=" + uname?

+ ", pwd=" + pwd + "]";

}


}






6.使用多線程實(shí)現(xiàn)1對(duì)1聊天

package dengLu;


import java.io.*;

import java.net.*;

import java.util.Scanner;

public class oneVoneFu {

public static void main(String[] args) throws Exception{


System.out.println("詩(shī)書(shū)畫(huà)唱SSHC,服務(wù)器端啟動(dòng),"

+ "\n請(qǐng)先輸入內(nèi)容,將會(huì)發(fā)給客戶端");

jieShouClass jieShouClass=new jieShouClass(33397);

// jieShouClass(int wofangduankou) ,

// 33397是接收客戶端發(fā)送給服務(wù)端時(shí),服務(wù)端要用來(lái)接受

// 客戶端發(fā)來(lái)內(nèi)容的端口號(hào),33397為服務(wù)端專(zhuān)門(mén)用來(lái)接受

// 客戶端發(fā)來(lái)內(nèi)容的端口號(hào)


faSongClass faSongClass=

new faSongClass(44497,11197,"localhost");

//44497為當(dāng)前服務(wù)器發(fā)送給客戶端內(nèi)容時(shí)要用的本機(jī)端口號(hào),

//11197為客戶本機(jī)端口號(hào)

new Thread(jieShouClass,"詩(shī)書(shū)畫(huà)唱").start();

new Thread(faSongClass).start();

}


}


package dengLu;


import java.util.*;

import java.io.*;

import java.net.*;

public class oneVoneKe {

public static void main(String[] args)throws Exception {


System.out.println("詩(shī)書(shū)畫(huà)唱,客戶端啟動(dòng)");

jieShouClass jieShouClass=new jieShouClass(11197);


faSongClass faSongClass

=new faSongClass(22297,33397,"localhost");

// 這里的22297為端口號(hào)

new Thread(jieShouClass,"詩(shī)書(shū)畫(huà)唱SSHC").start();

new Thread(faSongClass).start();

}

}

//————

//將發(fā)送數(shù)據(jù)封為一個(gè)類(lèi),

//將接收數(shù)據(jù)封為一個(gè)類(lèi),

//在用戶不管是客戶端還是服務(wù)器端都開(kāi)啟一個(gè)接收和發(fā)送的線程。

//————

class jieShouClass implements Runnable{

DatagramSocket DatagramSocket=null;

public jieShouClass(int benJiDuanKouHao){

try {

DatagramSocket=new DatagramSocket(benJiDuanKouHao);

} catch (SocketException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}


@Override

public void run() {

//接收數(shù)據(jù)也是死循環(huán)

while(true){

// byteArrayRead:用來(lái)讀對(duì)方輸入的內(nèi)容的字節(jié)數(shù)組

byte[] byteArrayRead=new byte[1024*60];

DatagramPacket DatagramPacket=

new DatagramPacket

(byteArrayRead, byteArrayRead.length);

try {

DatagramSocket.receive(DatagramPacket);

//解析數(shù)據(jù):

// byteArrayPrint:用來(lái)打印出讀出的對(duì)方發(fā)送過(guò)來(lái)的

// 內(nèi)容的字節(jié)數(shù)組

byte[] byteArrayPrint=DatagramPacket.getData();

int lenPrint=DatagramPacket.getLength();

// jieShouDaoDeNeiRong:接收到對(duì)方發(fā)來(lái)的內(nèi)容

String jieShouDaoDeNeiRong

=new String(byteArrayPrint,0,lenPrint);

if(jieShouDaoDeNeiRong.trim().equals("不聊了")){

break;

}

System.out.println(Thread.currentThread().getName()

+":"+jieShouDaoDeNeiRong);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}//:接收數(shù)據(jù)

}DatagramSocket.close();

}


}


class faSongClass implements Runnable{

private int wofangduankou,duiFangDuanKouHao;

String duiFangIP=null;

Scanner s=new Scanner(System.in);


//發(fā)送的對(duì)象:

// benJiDuanKouHao:本機(jī)端口號(hào)

// duiFangDuanKouHao:對(duì)方端口號(hào)

// duiFangIP:對(duì)方IP

DatagramSocket DatagramSocket=null;

public faSongClass(int benJiDuanKouHao,

int duiFangDuanKouHao,String duiFangIP){

this.duiFangDuanKouHao=duiFangDuanKouHao;

this.duiFangIP=duiFangIP;

try {

DatagramSocket=new?

DatagramSocket(benJiDuanKouHao);

} catch (SocketException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

@Override

public void run() {

while(true){

//打包數(shù)據(jù):

// shuRuNeiRong;輸入內(nèi)容

System.out.println(

// Thread.currentThread().getName()+

"——————\n"

+ "下面是評(píng)論區(qū)(請(qǐng)輸入你的內(nèi)容)\n"

+ "——————");

//System.out.println(

// Thread.currentThread().getName()+":");

String shuRuNeiRong=s.next();

DatagramPacket DatagramPacket

=new DatagramPacket(shuRuNeiRong.getBytes(),

shuRuNeiRong.getBytes().length,

new InetSocketAddress(duiFangIP,duiFangDuanKouHao));

if(shuRuNeiRong.trim().equals("不聊了")){

break;

}

try {

DatagramSocket.send(DatagramPacket);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

DatagramSocket.close();

}









}





Java含個(gè)人認(rèn)為很重要的個(gè)人理解和提醒:服務(wù)器,網(wǎng)絡(luò)編程,UDP【詩(shī)書(shū)畫(huà)唱】的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
即墨市| 长沙县| 安远县| 南宫市| 古浪县| 延津县| 含山县| 行唐县| 农安县| 瑞丽市| 栾城县| 昌都县| 都安| 七台河市| 泊头市| 公安县| 阿巴嘎旗| 新巴尔虎右旗| 保靖县| 云林县| 榆林市| 瓦房店市| 开原市| 阳春市| 库尔勒市| 凉山| 永春县| 德安县| 卢湾区| 林州市| 电白县| 渭南市| 澄江县| 科尔| 五寨县| 西吉县| 阿拉善左旗| 青州市| 兴海县| 花垣县| 金山区|