Datagram Scoket雙向通信
這里是兩個(gè)人進(jìn)行通信。是根據(jù)ip來(lái)判斷的,xp與xp之間沒(méi)有問(wèn)題,我win7和xp有問(wèn)題(已解決 關(guān)閉防火墻,如果是內(nèi)網(wǎng) 網(wǎng)段要一致)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class Me {
public static void main(String[] args) throws IOException {
new ReciveThread().start();//配置監(jiān)聽(tīng)程序 必須放在前面
new SendInfo().main(args);
}
}
class SendInfo {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String str = null;
String lines = "";
while ((str = bf.readLine()) != null) {
lines += str;
if (str.equals("ok")) {
send(lines);
lines = "";
}
if (str.equals("bye")) {
bf.close(); // 必須加break 否者還會(huì)有回車(chē)信號(hào) break;
}
}
}
static void send(String str) {
// UDP網(wǎng)絡(luò)程序
DatagramSocket ds = null;
DatagramPacket dp = null;
try {
ds = new DatagramSocket(3000);//打開(kāi)端口號(hào)
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
byte[] ip = new byte[] { (byte) 10, 1, 1, (byte) 200 };
dp = new DatagramPacket(str.getBytes(), str.length(),
InetAddress.getByAddress(ip), 9000);//faso
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
ds.send(dp);
System.out.println("send success");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ds.close();
}
}
class ReciveThread extends Thread {
public void run() {
while (true) {
DatagramSocket ds = null;
byte[] buf = new byte[1024];
DatagramPacket dp = null;
try {
ds = new DatagramSocket(9000);//打開(kāi)端口
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dp = new DatagramPacket(buf, 1024);
try {
ds.receive(dp);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String str = new String(dp.getData(), 0, dp.getLength()) + "from"
+ dp.getAddress().getHostAddress() + ":port" + dp.getPort();
System.out.println(str);
ds.close();
}
}
}
相關(guān)文章
基于mybatis高級(jí)映射多對(duì)多查詢的實(shí)現(xiàn)
下面小編就為大家?guī)?lái)一篇基于mybatis高級(jí)映射多對(duì)多查詢的實(shí)現(xiàn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10為什么rest接口返回json建議采用下劃線形式,不要用駝峰
為什么rest接口返回json建議采用下劃線形式,不要用駝峰?今天小編就來(lái)為大家說(shuō)明一下原因,還等什么?一起跟隨小編過(guò)來(lái)看看吧2020-09-09Java后臺(tái)防止客戶端重復(fù)請(qǐng)求、提交表單實(shí)現(xiàn)原理
這篇文章主要介紹了Java后臺(tái)防止客戶端重復(fù)請(qǐng)求、提交表單實(shí)現(xiàn)原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12Java打印斐波那契前N項(xiàng)的實(shí)現(xiàn)示例
這篇文章主要介紹了Java打印斐波那契前N項(xiàng)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02Java循環(huán)終止的實(shí)現(xiàn)方式總結(jié)
循環(huán)是一種重復(fù)執(zhí)行一段代碼的結(jié)構(gòu),Java提供了四種主要的循環(huán)結(jié)構(gòu),本文主要來(lái)和大家介紹一下Java循環(huán)終止的實(shí)現(xiàn)方式,有需要的小伙伴可以參考一下2023-10-10Java開(kāi)發(fā)中讀取XML與properties配置文件的方法
這篇文章主要介紹了Java開(kāi)發(fā)中讀取XML與properties配置文件的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-01-01