///客户端

package com.ch.day11_myclient;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import com.lidroid.xutils.BitmapUtils;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest;

import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.app.ProgressDialog;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends Activity {
private TextView allmessage;
private EditText say;
private Button send;

private Socket client;
BufferedReader br;
PrintWriter pw;
String sayData;

Handler h = new Handler(){
public void handleMessage(android.os.Message msg) {
String str = (String)msg.obj;
allmessage.setText(allmessage.getText().toString()+"\t\n"+str);
// allmessage.append(str);
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

init();
}

public void init(){
allmessage = (TextView) findViewById(R.id.allmessage);
say = (EditText) findViewById(R.id.say);
send = (Button) findViewById(R.id.send);

//建立和服务器的连接
try {
client = new Socket("169.254.109.73", 8888);//向169.254.109.73服务器的8888端口发送请求
//获得服务器端的信息,先创建服务器的输入流
br = new BufferedReader(new InputStreamReader(client.getInputStream()));
//向服务器发送消息,先创建输出流
pw = new PrintWriter(client.getOutputStream());
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//启动一个线程,随时接收服务器的信息
new Thread(){
public void run() {
try {
while(true){
String str = br.readLine();//读取当前服务器的一句话,读到为止,读不到不会继续向下走
Log.i("TAG", str);
//把str显示到allmessage
h.sendMessage(h.obtainMessage(0x123, str));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
}.start();
//点击发送,发送消息
send.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//得到发送的信息
sayData = say.getText().toString();
new Thread(){
public void run() {
Log.i("TAG", "11111111::::"+sayData);
pw.println(sayData);
pw.flush();//及时刷新,推送过去
};
}.start();
}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}

}

///服务端

package com.ch;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class MyServer {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
final ArrayList<Socket> ss = new ArrayList<Socket>();
try {
//启动服务器
ServerSocket server = new ServerSocket(8888);
while(true){
System.out.println("等待接收一个新的客户端的请求..............");
//等待接收一个客户端,接收到为止,代码才会继续向下执行
final Socket client = server.accept();
System.out.println("接收到了一个新的客户端的请求,ip:"+client.getInetAddress().toString());
ss.add(client);//把当前接收到的客户端,收集起来
//启动一个线程,接收当前客户端的信息,转发给其他客户端
new Thread(){
public void run() {
try {
//获得客户端的信息,先创建客户端的输入流
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
while(true){//有多条信息,需要循环读取
String data = br.readLine();//读取当前客户的信息
//把当前信息转发给,其他客户端,自己除外
//遍历集合获得所有客户端
for(Socket sk:ss){
if(sk != client){//自己除外
//创建一个兄弟客户端的输出流
PrintWriter pw = new PrintWriter(sk.getOutputStream());
pw.println(client.getInetAddress().toString()+"--say:"+data);
pw.flush();

}
}

}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
}.start();

}

// PrintWriter pw = new PrintWriter(client.getOutputStream());
// while(true){
// String str = br.readLine();//读取当前客户端的一句话,没有读到,此行代码不行执行完
// System.out.println(client.getInetAddress().toString()+"say::"+str);
// //向客户端发送消息,先创建输出流
// pw.println(str+",是吗?");
// pw.flush();//及时刷新,推送过去
//
// }

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

socket的简单通信的更多相关文章

  1. TCP和UDP并实现socket的简单通信

    http://www.cnblogs.com/IPrograming/archive/2012/10/15/CSharp_Socket_4.html http://www.cnblogs.com/do ...

  2. 基于TCP 协议的socket 简单通信

    DNS 服务器:域名解析 socket 套接字 : ​ socket 是处于应用层与传输层之间的抽象层,也是一组操作起来非常简单的接口(接受数据),此接口接受数据之后,交由操作系统 为什么存在 soc ...

  3. 【转】Qt Socket简单通信

    最近要用到Qt的Socket部分,网上关于这部分的资料都比较复杂,我在这总结一下,把Socket的主要部分提取出来,实现TCP和UDP的简单通信. 1.UDP通信 UDP没有特定的server端和cl ...

  4. socket上http协议应用(使用socket进行http通信的例子,准备好报头以后,简单read/write就可以了)

    前几天看socket本有点晕, 好不容易弄明白了,才发现公司服务器用的是http的. 找了好久也没发现linux下直接用http的api, 不过今日偶然发现了使用socket进行http通信的例子, ...

  5. socket.io简单说明及在线抽奖demo

    socket.io简单说明及在线抽奖demo socket.io 简介 Socket.IO可以实现实时双向的基于事件的通信. 它适用于各种平台,浏览器或设备,也同样注重可靠性和速度. socket.i ...

  6. 运用socket实现简单的服务器客户端交互

    Socket解释: 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. Socket的英文原义是“孔”或“插座”.作为BSD UNIX的进程通信机制,取后一种意 ...

  7. java socket实现全双工通信

    java socket实现全双工通信 单工.半双工和全双工的定义 如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工. 如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方 ...

  8. Eclipse搭建服务器,实现与Android的简单通信

    ---恢复内容开始--- 目标:实现客户端(Android App)与服务器(PC)的简单通信 相关准备:eclipse_mars.tomcat8.Android Studio 实现: 1.java环 ...

  9. Spring+Netty4实现的简单通信框架

    参考:http://cpjsjxy.iteye.com/blog/1587601 Spring+Netty4实现的简单通信框架,支持Socket.HTTP.WebSocket_Text.WebSock ...

随机推荐

  1. [收藏夹整理]OpenCV部分

    OpenCV中文论坛 OpenCV论坛 opencv视频教程目录(初级) OpenCV 教程 Opencv感想和一些分享 tornadomeet 超牛的大神 [数字图像处理]C++读取.旋转和保存bm ...

  2. http://blog.csdn.net/rongyongfeikai2/article/details/41659353

    http://blog.csdn.net/rongyongfeikai2/article/details/41659353

  3. sdut2169:Sequence(dp)

    题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2169 #include <iost ...

  4. 微信公众平台开发(99) 自定义菜单获取OpenID

    关键字 微信公众平台 自定义菜单 OpenID作者:方倍工作室原文:http://www.cnblogs.com/txw1958/p/weixin-menu-get-openid.html 在这篇微信 ...

  5. OProfile 性能分析工具

    OProfile 性能分析工具 官方网站:http://oprofile.sourceforge.net/news/ oprofile.ko模块本文主要介绍Oprofile工具,适用系统的CPU性能分 ...

  6. WPF控件模板

    引言:在进行WPF项目开发过程中,由于项目的需要,经常要对某个控件进行特殊的设定,其中就牵涉到模板的相关方面的内容.本文也是在自己进行项目开发过程中遇到控件模板设定时集中搜集资料后整理出来的,以供在以 ...

  7. ubuntu 更新 rtl8192cu 驱动

    ubuntu 更新 rtl8192cu 驱动 手上有个 tplink wr823n 的 usb 无线网卡,在 windows 下工作正常,但在 linux 上的比较差,速度没有 windows 上的快 ...

  8. nginx学习

    nginx源码学习是一个痛苦又快乐的过程,下面列出了一些nginx的学习资源. 首先要做的当然是下载一份nginx源码,可以从nginx官方网站下载一份最新的. 看了nginx源码,发现这是一份完全没 ...

  9. andriod网址

    http://www.runoob.com/w3cnote/android-tutorial-end.html  入门教程 长青说安卓

  10. [转载]CAD文件版本

    http://blog.sina.com.cn/s/blog_4c9fa4dd0101il1v.html 在工作中会遇到打开一张图纸时出现“图形文件无效”的提示,大部都是因为用低版本软件打开了高版本的 ...