当前位置:  编程技术>移动开发
本页文章导读:
    ▪Java-UDP通讯(双向)        Java--UDP通信(双向)新建两个工程,一个Send,一个Receive,先启动Receive,再启动Send,至此就可以双向通信   Send工程: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; impo.........
    ▪ Java-Socket通讯(双向,有界面)        Java--Socket通信(双向,有界面)   服务端: import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import.........
    ▪ 您正在使用的移动电话已经 40 岁       你正在使用的移动电话已经 40 岁 嗨 Joel,我是 Marty。我正在用手机给你打电话,是一部真正的移动手持电话哦。 1973 年 4 月 3 日,摩托罗拉的工程师 Marty Cooper 首次使用手机打通电话。.........

[1]Java-UDP通讯(双向)
    来源: 互联网  发布时间: 2014-02-18
Java--UDP通信(双向)

新建两个工程,一个Send,一个Receive,先启动Receive,再启动Send,至此就可以双向通信

 

Send工程:

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;

public class Send {
	//接收消息的端口
	private static final int PORT_RECEIVE = 8080;

	public static void main(String[] args) {
		handler();
	}

	private static void handler() {
		DatagramSocket sendSocket = null;
		DatagramSocket receiveSocket = null;
		try {
			//实例化两个套接字,一个用于接收消息,一个用于发送消息
			sendSocket = new DatagramSocket();
			receiveSocket = new DatagramSocket(PORT_RECEIVE);

			//实例化线程并启动,一个用于接收消息,一个用于发送消息
			new Thread(new SendThread(sendSocket)).start();
			new Thread(new ReceiveThread(receiveSocket)).start();
		} catch (SocketException e) {
			System.out.println("handler:异常!");
		}
	}
}

/*
 * 发送消息的线程类
 */
class SendThread implements Runnable{
	//将消息发送到指定端口和地址
	private static final int PORT_SEND = 9090;
	private static final String IP_SEND = "localhost";
	private DatagramSocket sendSocket;

	public SendThread(DatagramSocket sendSocket) {
		this.sendSocket = sendSocket;
	}

	@Override
	public void run() {
		BufferedReader br = null;
		try {
			while(true){
				//键盘录入
				br = new BufferedReader(new InputStreamReader(System.in));
				String line = null;
				while((line = br.readLine()) != null){
					//将键盘录入的内容转换成字节数组
					byte[] buf = line.getBytes();
					//实例化一个数据包,指定发送的内容,内容长度,发送的地址和端口
					DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName(IP_SEND), PORT_SEND);
					//发送数据包
					sendSocket.send(dp);
					//打印发送的内容
					System.out.println("I:" + line);
				}
			}
		} catch (IOException e) {
			System.out.println("send fail!");
		}finally{
			if(sendSocket != null){
				sendSocket.close();
			}
			if(br != null){
				try {
					br.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

/*
 * 接收消息的线程类
 */
class ReceiveThread implements Runnable{
	private DatagramSocket receiveSocket;

	public ReceiveThread(DatagramSocket receiveSocket) {
		this.receiveSocket = receiveSocket;
	}

	@Override
	public void run() {
		try {
			while(true){
				//一次接收的内容的最大容量
				byte[] buf = new byte[1024];
				DatagramPacket dp = new DatagramPacket(buf, buf.length);
				//接收数据包
				receiveSocket.receive(dp);
				//取得数据包里的内容 
				String data = new String(dp.getData(), 0, dp.getLength());
				//打印接收到的数据
				System.out.println("Other:" + data);
			}
		} catch (IOException e) {
			System.out.println("receive fail");
		}finally{
			if(receiveSocket != null){
				receiveSocket.close();
			}
		}
	}
}


 

 

Receive工程:

 

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;

public class Receive {
	//接收消息的端口
	private static final int PORT_RECEIVE = 9090;

	public static void main(String[] args) {
		handler();
	}

	private static void handler() {
		DatagramSocket sendSocket = null;
		DatagramSocket receiveSocket = null;
		try {
			//实例化两个套接字,一个用于接收消息,一个用于发送消息
			sendSocket = new DatagramSocket();
			receiveSocket = new DatagramSocket(PORT_RECEIVE);
			//实例化线程并启动,一个用于接收消息,一个用于发送消息
			new Thread(new SendThread(sendSocket)).start();
			new Thread(new ReceiveThread(receiveSocket)).start();
		} catch (SocketException e) {
			System.out.println("handler:异常!");
		}
	}
}

/*
 * 发送消息的线程类
 */
class SendThread implements Runnable{
	//将消息发送到指定端口和地址
	private static final int PORT_SEND = 8080;
	private static final String IP_SEND = "localhost";
	private DatagramSocket sendSocket;

	public SendThread(DatagramSocket sendSocket) {
		this.sendSocket = sendSocket;
	}

	@Override
	public void run() {
		BufferedReader br = null;
		try {
			while(true){
				//键盘录入
				br = new BufferedReader(new InputStreamReader(System.in));
				String line = null;
				while((line = br.readLine()) != null){
					//将键盘录入的内容转换成字节数组
					byte[] buf = line.getBytes();
					//实例化一个数据包,指定发送的内容,内容长度,发送的地址和端口
					DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName(IP_SEND), PORT_SEND);
					//发送数据包
					sendSocket.send(dp);
					//打印发送的内容
					System.out.println("I:" + line);
				}
			}
		} catch (IOException e) {
			System.out.println("send fail");
		}finally{
			if(sendSocket != null){
				sendSocket.close();
			}
			if(br != null){
				try {
					br.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

/*
 * 接收消息的线程类
 */
class ReceiveThread implements Runnable{
	private DatagramSocket receiveSocket;

	public ReceiveThread(DatagramSocket receiveSocket) {
		this.receiveSocket = receiveSocket;
	}

	@Override
	public void run() {
		try {
			while(true){
				//一次接收的内容的最大容量
				byte[] buf = new byte[1024];
				DatagramPacket dp = new DatagramPacket(buf, buf.length);
				//接收数据包
				receiveSocket.receive(dp);
				String data = new String(dp.getData(), 0, dp.getLength());
				//取得数据包里的内容 
				System.out.println("Other:" + data);
			}
		} catch (IOException e) {
			System.out.println("receive fail");
		}finally{
			if(receiveSocket != null){
				receiveSocket.close();
			}
		}
	}
}


 


    
[2] Java-Socket通讯(双向,有界面)
    来源: 互联网  发布时间: 2014-02-18
Java--Socket通信(双向,有界面)

 

服务端:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;

public class ChatFrameServer{
	
	private PrintWriter pw;
	private JFrame frame;
	private JPanel pane_buttom;
	private JSplitPane pane_center;

	//显示内容的文本框,输入内容的文本框,发送内容按钮
	private JScrollPane pane_showWindow;
	private JScrollPane pane_inputWindow;
	private JTextArea area_showWindow;
	private JTextArea area_inputWindow;
	
	private JButton btn_send;

	private Dimension dimension;//用于设置area_showWindow可拖拉的大小

	//初始化
	public ChatFrameServer() {
		frame = new JFrame();
		pane_buttom = new JPanel();
		pane_showWindow = new JScrollPane();
		pane_inputWindow = new JScrollPane();
		area_showWindow = new JTextArea();
		area_inputWindow = new JTextArea();
		pane_center = new JSplitPane(JSplitPane.VERTICAL_SPLIT, false, pane_showWindow, pane_inputWindow);
		btn_send = new JButton("发送");

		dimension = new Dimension(50, 300);

	}

	//调用方法显示窗口
	public void showFrame(){
		initFrame();
		initChatTextArea();
		initButton();
		btn_send();
		socket();
	}

	//主窗体
	public void initFrame(){
		frame.setTitle("服务端");
		int width = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth();
		int height = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight();
		frame.setBounds(width / 2, height / 2, 400, 450);
		frame.setVisible(true);
	}

	//内容显示文本框和输入内容文本框
	private void initChatTextArea(){
		//取得视图焦点
		pane_showWindow.getViewport().add(area_showWindow);
		pane_inputWindow.getViewport().add(area_inputWindow);
		//将显示文本域设置为不可编辑
		area_showWindow.setEditable(false);
		//设置显示文本域可拖拉的大小 
		pane_showWindow.setMinimumSize(dimension);
		frame.add(pane_center, BorderLayout.CENTER);
	}

	//发送文件,发送内容按钮
	public void initButton(){
		pane_buttom.add(btn_send);
		frame.add(pane_buttom, BorderLayout.SOUTH);
	}


	private void btn_send(){
		btn_send.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String info = area_inputWindow.getText();
				area_showWindow.append("服务端:"+info+"\r\n");
				pw.println(info);
				area_inputWindow.setText("");
			}
		});
	}
	private void socket(){
		ServerSocket ss;
		try {
			ss = new ServerSocket(9988);
			//等待连接 客户端
			Socket s=ss.accept();
			InputStreamReader isr=new InputStreamReader(s.getInputStream());
			BufferedReader br=new BufferedReader(isr);
			//PrintWriter必须和socket有密切的关系
			pw=new PrintWriter(s.getOutputStream(),true);

			//读取从客户端法发来的信息
			while(true) {
				//读取从客户端发来的信息
				String info=br.readLine();
				//在文本栏里显示
				area_showWindow.append("客户端:"+info+"\r\n");
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public static void main(String[] args) {
		ChatFrameServer chat = new ChatFrameServer();
		chat.showFrame();
	}
}


客户端:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;

public class ChatFrame{
	private PrintWriter pw;
	private JFrame frame;
	private JPanel pane_buttom;
	private JSplitPane pane_center;

	//显示内容的文本框,输入内容的文本框,发送内容按钮
	private JScrollPane pane_showWindow;
	private JScrollPane pane_inputWindow;
	private JTextArea area_showWindow;
	private JTextArea area_inputWindow;

	private JButton btn_send;

	private Dimension dimension;//用于设置area_showWindow可拖拉的大小


	//初始化
	public ChatFrame() {
		frame = new JFrame();
		pane_buttom = new JPanel();
		pane_showWindow = new JScrollPane();
		pane_inputWindow = new JScrollPane();
		area_showWindow = new JTextArea();
		area_inputWindow = new JTextArea();
		pane_center = new JSplitPane(JSplitPane.VERTICAL_SPLIT, false, pane_showWindow, pane_inputWindow);
		btn_send = new JButton("发送");

		dimension = new Dimension(50, 300);
	}

	//调用方法显示窗口
	public void showFrame(){
		initFrame();
		initChatTextArea();
		initButton();
		btn_send();
		socket();
	}

	//主窗体
	public void initFrame(){
		frame.setTitle("客户端");
		int width = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth();
		int height = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight();
		frame.setBounds(width / 2, height / 2, 400, 450);
		frame.setVisible(true);
	}

	//内容显示文本框和输入内容文本框
	private void initChatTextArea(){
		//取得视图焦点
		pane_showWindow.getViewport().add(area_showWindow);
		pane_inputWindow.getViewport().add(area_inputWindow);
		//将显示文本域设置为不可编辑
		area_showWindow.setEditable(false);
		//设置显示文本域可拖拉的大小 
		pane_showWindow.setMinimumSize(dimension);
		frame.add(pane_center, BorderLayout.CENTER);
	}

	//发送文件,发送内容按钮
	public void initButton(){
		pane_buttom.add(btn_send);
		frame.add(pane_buttom, BorderLayout.SOUTH);
	}

	private void btn_send(){
		btn_send.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String info = area_inputWindow.getText();
				area_showWindow.append("客户端: "+info+"\r\n");
				pw.println(info);
				area_inputWindow.setText("");
			}
		});
	}
	
	private void socket(){
		try {
			Socket s = new Socket("127.0.0.1",9988);
			InputStreamReader isr=new InputStreamReader(s.getInputStream());
			BufferedReader br=new BufferedReader(isr);
			pw=new PrintWriter(s.getOutputStream(),true);
			while(true){
				//不停地读取从服务器端发来的信息
				String info=br.readLine();
				area_showWindow.append("服务端: "+info+"\r\n");
			}
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public static void main(String[] args) {
		ChatFrame chat = new ChatFrame();
		chat.showFrame();
	}
}


 


    
[3] 您正在使用的移动电话已经 40 岁
    来源: 互联网  发布时间: 2014-02-18
你正在使用的移动电话已经 40 岁

嗨 Joel,我是 Marty。我正在用手机给你打电话,是一部真正的移动手持电话哦。

1973 年 4 月 3 日,摩托罗拉的工程师 Marty Cooper 首次使用手机打通电话。首次通话献给了当时的竞争对手,Bell Labs 研发中心的负责人 Joel Engel。至于设备,使用的是摩托罗拉的 DynaTAC 8000x,重达 2.5 英镑,比我们今天使用的手机巨大得多。

Marty Cooper 作为移动电话的发明者,现在还在为美国联邦通信委员会(FCC)和国家电信和信息管理局(NTIA)工作,他现在所使用的手机还是摩托罗拉——Droid RAZR。


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
IT科技资讯 iis7站长之家
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3