socket 非阻塞即时通讯
2016-06-28 17:09
225 查看
socket(非NIO)是阻塞的,这里使用多线程实现非阻塞即时通讯。每个请求都要创建个新的线程,资源消耗很大,适用于小数据量操作。包括四个文件:Server.java,Client.java,Send.java,Print.java.
1.Server.java:
package com.lcq.socket;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
ServerSocket serverSocket;
Socket socket;
try {
System.out.println("服务器启动。。。");
serverSocket = new ServerSocket(9000);
socket = serverSocket.accept();
System.out.println("服务端连接成功");
DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
SendThread sendThread = new SendThread(dataOutputStream);
PrintThread printThread = new PrintThread(dataInputStream, "127.0.0.1");
Thread send = new Thread(sendThread);
Thread print = new Thread(printThread);
send.start();
print.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.Client.java
package com.lcq.socket;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("127.0.0.1", 9000);
DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
SendThread sendThread = new SendThread(dataOutputStream);
PrintThread printThread = new PrintThread(dataInputStream, "127.0.0.1");
Thread send = new Thread(sendThread);
Thread print = new Thread(printThread);
send.start();
print.start();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.SendThread:
package com.lcq.socket;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
public class SendThread implements Runnable {
private DataOutputStream dataOutputStream;
public SendThread(DataOutputStream dataOutputStream) {
super();
this.dataOutputStream = dataOutputStream;
}
@Override
public void run() {
BufferedReader bufferedReader = null;
while (true) {
try {
bufferedReader = new BufferedReader(new InputStreamReader(
System.in));
String line = bufferedReader.readLine();
if (line != null) {
dataOutputStream.writeUTF(line);
}
} catch (Exception e) {
break;
}
}
}
}
4.Print.java:
package com.lcq.socket;
import java.io.DataInputStream;
import java.io.IOException;
public class PrintThread implements Runnable{
private String ip = null;
private DataInputStream dataInputStream;
public PrintThread(DataInputStream dataInputStream,String ip){
super();
this.dataInputStream = dataInputStream;
this.ip = ip;
}
@Override
public void run() {
while(true){
try {
String line = dataInputStream.readUTF();
System.out.println(ip+":"+line);
} catch (IOException e) {
break;
}
}
}
}
1.Server.java:
package com.lcq.socket;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
ServerSocket serverSocket;
Socket socket;
try {
System.out.println("服务器启动。。。");
serverSocket = new ServerSocket(9000);
socket = serverSocket.accept();
System.out.println("服务端连接成功");
DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
SendThread sendThread = new SendThread(dataOutputStream);
PrintThread printThread = new PrintThread(dataInputStream, "127.0.0.1");
Thread send = new Thread(sendThread);
Thread print = new Thread(printThread);
send.start();
print.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.Client.java
package com.lcq.socket;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("127.0.0.1", 9000);
DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
SendThread sendThread = new SendThread(dataOutputStream);
PrintThread printThread = new PrintThread(dataInputStream, "127.0.0.1");
Thread send = new Thread(sendThread);
Thread print = new Thread(printThread);
send.start();
print.start();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.SendThread:
package com.lcq.socket;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
public class SendThread implements Runnable {
private DataOutputStream dataOutputStream;
public SendThread(DataOutputStream dataOutputStream) {
super();
this.dataOutputStream = dataOutputStream;
}
@Override
public void run() {
BufferedReader bufferedReader = null;
while (true) {
try {
bufferedReader = new BufferedReader(new InputStreamReader(
System.in));
String line = bufferedReader.readLine();
if (line != null) {
dataOutputStream.writeUTF(line);
}
} catch (Exception e) {
break;
}
}
}
}
4.Print.java:
package com.lcq.socket;
import java.io.DataInputStream;
import java.io.IOException;
public class PrintThread implements Runnable{
private String ip = null;
private DataInputStream dataInputStream;
public PrintThread(DataInputStream dataInputStream,String ip){
super();
this.dataInputStream = dataInputStream;
this.ip = ip;
}
@Override
public void run() {
while(true){
try {
String line = dataInputStream.readUTF();
System.out.println(ip+":"+line);
} catch (IOException e) {
break;
}
}
}
}
相关文章推荐
- python 嵌套list的一些小结
- The Key Sations_toj2189_割点
- 块设备驱动程序
- 使用Visual Studio进行 Android开发的十大理由
- 关于鼠标的一些操作
- NGINX配置location总结及rewrite规则写法
- Hive分析窗口函数(一) SUM,AVG,MIN,MAX
- 调用webservice服务(一) 学习笔记
- 移动办公系统定义
- leaflet学习教程 (一)
- 实时监听输入框值变化:oninput & onpropertychange
- [Java] JSP笔记 - Filter 过滤器
- Oppo_A53m救砖刷机过程
- USACO2011Open Silver Running Laps题解
- jquery操作下拉框select
- wordpress 页面跳转
- 加载src下的配置文件
- 在Ajax中使用get和post所遇到的问题及解决办法
- Android中Activity、Intent相关Flag介绍
- Hibernate总结-----Hibernate简介,基本配置