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

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

Java傳輸當(dāng)前日期,TCP網(wǎng)絡(luò)編程,Socket,UDP傳輸,DatagramPacket【詩(shī)書畫唱】

2020-08-09 23:47 作者:詩(shī)書畫唱  | 我要投稿

用上TCP,先啟動(dòng)服務(wù)器的部分,之后開啟客戶端,之后用客戶端發(fā)送信息給服務(wù)器

package TCP;

import java.io.*;

import java.net.*;

public class TCP服務(wù)器 {


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

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



ServerSocket ServerSocket=new ServerSocket(8888);


while(true){


Socket Socket=ServerSocket.accept();

ObjectInputStream ObjectInputStream=

new ObjectInputStream(Socket.getInputStream());

byte[] b=new byte[1024*60];?

ObjectInputStream.read(b);

if(new String(b,0,b.length).equals("break")){

Socket.close();

break;

}else{

System.out.println("給詩(shī)書畫唱三連關(guān)注");

System.out.println("接收到的客戶端發(fā)送來(lái)"

+ "的內(nèi)容為"+new String(b,0,b.length));

}

}

ServerSocket.close();

}


}


package TCP;


import java.io.*;

import java.net.Socket;

import java.util.Scanner;


public class TCP客戶端 {


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

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


// 什么是Socket 在計(jì)算機(jī)通信領(lǐng)域,socket 被翻譯為“套接字”,

// 它是計(jì)算機(jī)之間進(jìn)行通信的一種約定或一種方式

Socket s=new Socket("localhost",8888);

Scanner s1=new Scanner(System.in);

while(true){

System.out.println("請(qǐng)輸入內(nèi)容");

String str=s1.next();

if(str.trim().equals("break")){

break;

}else{

ObjectOutputStream oos

=new ObjectOutputStream(s.getOutputStream());

oos.write(str.getBytes());

oos.flush();

System.out.println(2);

}

}

s.close();

}


}




用UDP協(xié)議來(lái)用客戶端把當(dāng)前的日期傳給服務(wù)端

——————


package date;


import java.io.ByteArrayInputStream;

import java.io.ObjectInputStream;

import java.net.*;

import java.util.Date;

public class UDPfuWuDuan {

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

System.out.println("服務(wù)器端啟動(dòng)成功!先啟動(dòng)服務(wù)端之后啟動(dòng)"

+ "客戶端,"

+ "\n之后客戶端會(huì)把當(dāng)前的日期發(fā)送到服務(wù)端");

// datagram:

// 數(shù)據(jù)報(bào); 數(shù)據(jù)包; 數(shù)據(jù)報(bào)文; 數(shù)據(jù)報(bào); 數(shù)據(jù)表;

DatagramSocket DatagramSocket

=new DatagramSocket(23456);

byte[] byteArray1=new byte[1026];

DatagramPacket DatagramPacket=new DatagramPacket(byteArray1,

byteArray1.length);

DatagramSocket.receive(DatagramPacket);

byte[] byteArray=DatagramPacket.getData();

int len=DatagramPacket.getLength();


//用readObject(),讀傳入過(guò)來(lái)的數(shù)據(jù)。

//ByteArrayInputStream:可以得到字節(jié),但是不能轉(zhuǎn)int。

//ObjectInputStream:可以轉(zhuǎn)int。

ByteArrayInputStream ByteArrayInputStream

=new ByteArrayInputStream(byteArray,0,len);

//

// ObjectInputStream為對(duì)象輸入流,

// 把ByteArrayInputStream放到對(duì)象輸入流的“()”里,

// 就可以把內(nèi)容轉(zhuǎn)為int類型的數(shù)據(jù)。

ObjectInputStream ObjectInputStream

=new ObjectInputStream(ByteArrayInputStream);




Date Date =(Date)ObjectInputStream.readObject();

System.out.println(Date.toLocaleString());

DatagramSocket.close();


}


}




package date;

import java.io.ByteArrayOutputStream;

import java.io.ObjectOutputStream;

import java.io.Serializable;

import java.net.*;

import java.util.Date;

import java.util.Scanner;

public class UDPkeHuDuanDate {

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)了");

DatagramSocket DatagramSocket=new DatagramSocket(12345);

Date Date=new Date();

//int類型不能直接轉(zhuǎn)字節(jié)數(shù)組

//ByteArrayOutputStream:轉(zhuǎn)字節(jié)(不能讀int)

//ObjectOutputStream:這個(gè)可以讀int

ByteArrayOutputStream ByteArrayOutputStream

=new ByteArrayOutputStream();

ObjectOutputStream ObjectOutputStream

=new ObjectOutputStream(ByteArrayOutputStream);

ObjectOutputStream.writeObject(Date);

ObjectOutputStream.flush();

//

byte[] byteArray2=ByteArrayOutputStream.toByteArray();

DatagramPacket DatagramPacket2=new DatagramPacket(byteArray2,

byteArray2.length,new InetSocketAddress(

"localhost",23456));

DatagramSocket.send(DatagramPacket2);

DatagramSocket.close();

}

}

////傳float和自定義一個(gè)用戶名和密碼試一下

//class yonghu implements Serializable{

//

//}

package TCP;

import java.net.*;

import java.io.*;

import java.util.*;

public class TCP_fuWuQi {

//現(xiàn)在是每個(gè)人的Socket保存在對(duì)應(yīng)的線程里

//聲明一個(gè)集合用來(lái)保存每個(gè)線程,打印的時(shí)候就是遍歷保存

//線程的集合,

static Vector<fuwuqi_jieshou> v_xiancheng=new Vector<fuwuqi_jieshou>();

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

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

//1.定義服務(wù)器對(duì)象

ServerSocket ss=new ServerSocket(12345);

//2.使用服務(wù)器對(duì)象進(jìn)行堵塞性接收數(shù)據(jù)

System.out.println("服務(wù)器等待用戶傳輸數(shù)據(jù)");

while(true){

Socket s=ss.accept();

System.out.println("一個(gè)用戶建立了鏈接");

fuwuqi_jieshou fj= new fuwuqi_jieshou(s);

//將每個(gè)人的線程保存在線程集合里

v_xiancheng.add(fj);

new Thread(fj).start();

}



// 每一個(gè)客戶端訪問(wèn)服務(wù)器他們使用的是自己的額Socket,

// 現(xiàn)在造成的原因是多個(gè)人去訪問(wèn)的時(shí)候,他們用的是同一個(gè)Socket

// 就會(huì)造成堵塞,當(dāng)前Socket沒(méi)有被釋放掉,其他Socket進(jìn)不來(lái),就會(huì)

// 造成只有一個(gè)人可以說(shuō)話

//

// 如何解決:

// 讓每一個(gè)訪問(wèn)服務(wù)器的Socket單獨(dú)放入到一個(gè)線程里,每個(gè)線程放入

// 的Socket不一致,多個(gè)線程的Socket不同,調(diào)用哪個(gè)線程的Socket就是

// 哪個(gè)人在說(shuō)話

// 單獨(dú)寫一個(gè)線程類,讓訪問(wèn)服務(wù)器的Socket通過(guò)構(gòu)造方法傳入到線程

// 類里





//原因是因?yàn)槎鄠€(gè)用戶訪問(wèn)服務(wù)器的時(shí)候,他們會(huì)進(jìn)行排隊(duì),

//第一個(gè)用戶滿意訪問(wèn)完,第二個(gè)用戶是不能訪問(wèn)的

//每一個(gè)人訪問(wèn)服務(wù)器就給當(dāng)前用戶單獨(dú)開啟一個(gè)線程

//3.接收Socket里發(fā)送的數(shù)據(jù)

//群聊

//假如有三個(gè)客戶端,客戶端1說(shuō)一句話,客戶端2

//和客戶端3收到信息,相應(yīng)的也是一樣


}

}

//接收的線程類

class fuwuqi_jieshou implements Runnable{

Socket s=null;//已經(jīng)可以得到每個(gè)人的Socket對(duì)象

//每個(gè)人的流應(yīng)該也要是自己的

DataInputStream dis=null;

DataOutputStream dos=null;

public fuwuqi_jieshou(Socket s){

try {

this.s=s;

dis=new DataInputStream(s.getInputStream());

dos=new DataOutputStream(s.getOutputStream());

} catch (Exception e) {

}

}

@Override

public void run() {

while(true){

try {

String str=dis.readUTF();

System.out.println(str);

//誰(shuí)發(fā)給服務(wù)器的內(nèi)容服務(wù)器再講這個(gè)

//內(nèi)容返回給誰(shuí)

//而是遍歷整個(gè)線程集合,判斷每個(gè)線程是不是屬于

//發(fā)送信息的線程,如果是的時(shí)候什么都不做

//不是的時(shí)候就將這個(gè)內(nèi)容轉(zhuǎn)發(fā)給其他線程

//取出他們Socket,進(jìn)行轉(zhuǎn)發(fā)

for(fuwuqi_jieshou i:TCP_fuWuQi.v_xiancheng){

if(i==this){

//屬性發(fā)送信息的線程,那就跳過(guò)

continue;

}else{

//取出他們的Socket

Socket s=i.s;

//取出他們的輸出流

DataOutputStream dos=new DataOutputStream(s.getOutputStream());

dos.writeUTF(str);

dos.flush();

}

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}


}




package TCP;

import java.net.*;

import java.util.Scanner;

import java.io.*;

public class TCP_keHuDuan {

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

Scanner s1=new Scanner(System.in);

//客戶端發(fā)送數(shù)據(jù)到服務(wù)器,服務(wù)器返回?cái)?shù)據(jù)給

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

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

//1.定義發(fā)送給誰(shuí)?

Socket s=new Socket("localhost",12345);

new Thread(new kehu_fasong(s)).start();

new Thread(new kehu_jieshou(s)).start();

}

}

//它只需要得到輸出流即可

class kehu_fasong implements Runnable{

Socket s=null;

Scanner s1=new Scanner(System.in);

DataOutputStream dos=null;

public kehu_fasong(Socket s){

try {

this.s=s;

dos=new DataOutputStream(s.getOutputStream());

} catch (Exception e) {

// TODO: handle exception

}

}

@Override

public void run() {

while(true){

System.out.println("請(qǐng)輸入內(nèi)容");

String str=s1.next();

try {

dos.writeUTF(str);

dos.flush();

} catch (IOException e) {

e.printStackTrace();

}


}

}

}

//接收只需要接收的線程即可

class kehu_jieshou implements Runnable{

Socket s=null;

DataInputStream dis=null;

public kehu_jieshou(Socket s){

try {

this.s=s;

dis=new DataInputStream(s.getInputStream());

} catch (Exception e) {

// TODO: handle exception

}

}

@Override

public void run() {

while(true){

String str;

try {

str = dis.readUTF();

System.out.println(str);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}


}

}


}




UDP傳輸

udp傳輸數(shù)據(jù)就好像在大海上運(yùn)輸貨物,DatagramSocket就像的兩個(gè)通信港口的碼頭,DatagramPacket就像在兩端運(yùn)輸貨物的輪船

  • 發(fā)送端(send)

    • 創(chuàng)建DatagramSocket,隨機(jī)端口號(hào)

    • 創(chuàng)建DatagramPacket,制定數(shù)據(jù),長(zhǎng)度,地址和端口

    • 使用DatagramSocket發(fā)送DatagramPacket

    • 關(guān)閉DatagramSocket

    • 異常處理






一旦成功創(chuàng)建一個(gè)Socket類的實(shí)例,可以用它來(lái)發(fā)送和接收字節(jié)流,發(fā)送時(shí)調(diào)用getOutputStream方法獲取一個(gè)java.io.OutputStream對(duì)象,接收遠(yuǎn)程對(duì)象發(fā)送來(lái)的信息可以調(diào)用getInputStream方法來(lái)返回一個(gè)java.io.InputStream對(duì)象。?



(以下觀點(diǎn)僅供參考,不一定準(zhǔn)確,其實(shí)這個(gè)世上幾乎沒(méi)有什么是可靠的,都是不一定準(zhǔn)確的,最重要的是努力提升自己各個(gè)方面的價(jià)值等)

“包”(Packet)是TCP/IP協(xié)議通信傳輸中的數(shù)據(jù)單位,一般也稱“數(shù)據(jù)包”。在局域網(wǎng)中,“包”是包含在“幀”里的。

datagram(數(shù)據(jù)報(bào)):在網(wǎng)絡(luò)層中的傳輸單元(例如IP)。

一個(gè)datagram可能被壓縮成一個(gè)或幾個(gè)packets,在數(shù)據(jù)鏈路層中傳輸。


Java傳輸當(dāng)前日期,TCP網(wǎng)絡(luò)編程,Socket,UDP傳輸,DatagramPacket【詩(shī)書畫唱】的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
临高县| 鄂尔多斯市| 微博| 同心县| 尚义县| 宁波市| 鄯善县| 庐江县| 阆中市| 滦平县| 五指山市| 明星| 乐至县| 伊金霍洛旗| 历史| 滁州市| 唐河县| 顺平县| 宜昌市| 新余市| 恭城| 敖汉旗| 溧阳市| 柘城县| 商水县| 上蔡县| 沅陵县| 株洲县| 贵溪市| 凉山| 左权县| 石林| 府谷县| 图木舒克市| 克拉玛依市| 通化市| 锦屏县| 鹿泉市| 丁青县| 临高县| 家居|