经过前面内容的学习,我们了解了Java技术中实现网络通信的基本知识。下面将通过一个具体视力的实现过程,讲解客户端和服务器端通信的流程。

服务器端的实现文件是 Server.java,代码如下:

 import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.util.*; class Conn extends Thread{
private JTextArea txt;
private Socket st;
private String msg = null;
private BufferedReader br = null;
private PrintStream ps;
public Conn(Socket st,JTextArea txt){
this.st = st;
this.txt = txt;
start();
}
public void run(){
try{
br = new BufferedReader(new InputStreamReader(st.getInputStream()));
ps = new PrintStream(new DataOutputStream(st.getOutputStream()));
}catch(Exception e){
System.err.println("input failed");
}
while(true){
try{
msg = br.readLine();
txt.append("从客户端收到信息:"+msg+'\n');
txt.append("信息接受时间是:"+new Date()+"\n");
Server.send(msg);
}catch(Exception e){
System.err.println("connection closed");
break;
}
}
}
public void send(String msg){
ps.println(msg);
}
}
public class Server extends JFrame{
private JTextArea txt;
private ServerSocket ss;
private static java.util.List<Conn> conns = new ArrayList<Conn>();
public Server(){
txt = new JTextArea();
this.setTitle("服务器");
this.setLayout(new BorderLayout());
this.add(new JScrollPane(txt),BorderLayout.CENTER);
this.setSize(500,300);
this.setVisible(true);
run();
}
public void run(){
try{
ss = new ServerSocket(8000);
}catch(Exception e){
System.err.println("open socket failed");
}
txt.append("服务器已经启动!"+"\n");
while(true){
try{
Socket st=ss.accept();
conns.add(new Conn(st,txt));
}
catch(IOException ex){
System.err.println(ex);
}
}
}
public static void send(String msg){
for(Conn c:conns)
c.send(msg);
}
public static void main(String args[]){
Server myserver=new Server();
}
}

客户端的实现文件是Client.java,代码如下:

 import java.io.*;
import java.awt.*;
import java.awt.event.*; import javax.swing.*; import java.net.*;
import java.util.*; public class Client extends JFrame implements ActionListener{
final JTextArea txta;
JTextField txtf;
JPanel pl;
JButton bt;
BufferedReader br;
DataOutputStream out;
PrintStream ps;
Container f = this.getContentPane();
public Client() {
f.setLayout(new BorderLayout());
txta = new JTextArea();
f.add(txta,BorderLayout.CENTER);
txtf = new JTextField(20);
bt = new JButton ("发送");
pl = new JPanel();
pl.setLayout(new FlowLayout());
pl.add(txtf);
pl.add(bt);
bt.addActionListener(this);
f.add(pl,BorderLayout.SOUTH);//The south layout constraint (bottom of container).
setTitle("信息发送端");
setSize(500,300);
setVisible(true);
run();
Thread t = new Thread(new Runnable() { public void run() {
while(true) { try{
txta.append("收到消息:"+br.readLine()+"\n");
}catch(Exception ex) {}
} }
});
t.start();
} public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource() == bt) {
String msg = txtf.getText();
try{
ps.println(msg);
txta.append("已经发送消息:"+msg+"\n");
}catch(Exception ex){
txta.append(ex.toString()+"\n");
}
}
}
private void run() {
try
{
Socket sc= new Socket("127.0.0.1",8000);
out = new DataOutputStream(sc.getOutputStream());
ps = new PrintStream(out);
br = new BufferedReader(new InputStreamReader(sc.getInputStream()));
}
catch(IOException ex)
{
txta.append(ex.toString()+"\n");
} } public static void main(String[] args) {
Client myclient = new Client();
} }

同样是先执行服务器端,在执行客户端,效果如下:

《安卓网络编程》之第二篇 java环境下网络通信的综合应用的更多相关文章

  1. 《安卓网络编程》之第一篇 java环境下模拟客户端、服务器端

    1.Socket简介 在网络上的两个程序通过一个双向的通信连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket是TCP/IP协议的一个 ...

  2. 《安卓网络编程》之第四篇 处理URL地址

    在Android手机系统中,可以通过URL地址获取网络资源.在URL类的众多方法中,可以使用openStream()方法来读取该URL资源的输入流InputStream.在此方法的基础上可以引申出很多 ...

  3. NLPIR分词工具的使用(java环境下)

    一.NLPIR是什么? NLPIR(汉语分词系统)由中科大张华平博士团队开发,主要功能包括:中文分词,词性标注,命名实体识别,用户词典功能,详情见官网:http://ictclas.nlpir.org ...

  4. Java 环境下使用 AES 加密的特殊问题处理

    在 Java 环境下使用 AES 加密,在密钥长度和字节填充方面有一些比较特殊的处理. 1. 密钥长度问题 默认 Java 中仅支持 128 位密钥,当使用 256 位密钥的时候,会报告密钥长度错误 ...

  5. Java环境下shiro的测试-认证与授权

    Java环境下shiro的测试 1.导入依赖的核心jar包 <dependency> <groupId>org.apache.shiro</groupId> < ...

  6. 这是关于FastJson的一个使用Demo,在Java环境下验证的

    public class User { private int id; private String name; public int getId() { return id; } public vo ...

  7. 安卓网络编程学习(1)——java原生网络编程(1)

    写在前面 马上要进行第二轮冲刺,考虑到自己的APP在第一轮冲刺的效果不尽人意,有很多网络方面的小BUG,这里就系统学习一下网络编程,了解来龙去脉,以便更好的对项目进行优化处理. http协议 http ...

  8. [ 高并发]Java高并发编程系列第二篇--线程同步

    高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...

  9. RobotFrameWork+APPIUM实现对安卓APK的自动化测试----第二篇【原理】

    http://blog.csdn.net/deadgrape/article/details/50574459 接着上一篇,我们开始聊聊APPIUM的框架和运行模式.废话不多说直接上图. 1.首先自动 ...

随机推荐

  1. 老李案例分享:MAT分析应用程序服务出现内存溢出过程

    老李案例分享:MAT分析应用程序服务出现内存溢出过程   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的loa ...

  2. 打印pid,写着玩。

    #include <stdio.h> #include <string.h> #include <dirent.h> #include <limits.h&g ...

  3. 从零开始用 Flask 搭建一个网站(一)

    前言 笔者之前未接触过 Python,只是略懂一点前端,所以说从零开始也相差无几吧.Flask 是一个轻量级的基于 Python 的框架,但是扩展性非常良好(Github 上 22000 多个 sta ...

  4. iOS图片填充UIImageView(contentMode)

    本文主要形象的介绍一下UIView的contentMode属性: 核心代码 [self.prp_imageView setContentMode:UIViewContentModeScaleAspec ...

  5. SVG如何做圆形图片

    SVG如何做圆形图片 2016年5月31日17:30:48 提到圆形图片,大家首先想到的一定是border-radius,但在SVG中这些方法很难起效,下面方法适合SVG中制作任意规则与不规则的图形. ...

  6. My SQL数据库的安装与配置

    MySQL是一个关系型数据库管理系统.MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言 MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小.速度快.总体拥有成本低,尤 ...

  7. JQuery获取元素类名

    一般而言,JQuery可以利用attr来获取元素的属性值, 1.$("元素").attr("属性");                //获取指定属性的值 2. ...

  8. 让Dev C++支持C++11

    打开编译选项

  9. web安全色

    web安全色产生的原因 不同的平台(Mac.PC等)有不同的调色板,不同的浏览器也有自己的调色板.这就意味着对于一幅图,显示在Mac上的Web浏览器中的图像,与它在PC上相同浏览器中显示的效果可能差别 ...

  10. php函数每日学习二十个

    数学函数 1,abs() 求绝对值 2,ceil() 进一法取整 3,floor() 舍去法取整 4,fmod()对浮点数进行取余 例如fmod(5.7,1.3) 5,pow() 返回数的n次方 po ...