您的位置:首页 > 其它

socket简单实现实时通信案例

2014-03-21 16:47 330 查看
socket简单实现实时通信案例

package Grasp;
public class TestGrasp {
public static void main(String[] args) {

GraspClient gc = GraspClient.getGraspTcp();

System.out.println(gc);

gc.requestServer("select|2");

System.out.println("发送成功");

String response = gc.responseServer();

System.out.println("取得成功");

System.out.println(response);

gc.requestServer("select|3");

System.out.println("发送成功");

response = gc.responseServer();

System.out.println("取得成功");

System.out.println(response);

}
}

package Grasp;
import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.Socket;

import java.net.UnknownHostException;
public class GraspClient {

private Socket s;

private BufferedReader input;

private PrintWriter out;

private static GraspClient gc;

private String line;

private boolean wait;

private Object obj;

private GraspClient(String serverIp, int serverPort){

try {

obj = new Object();

wait = true;

s = new Socket(serverIp, serverPort);

System.out.println("连接成功");

input = new BufferedReader(new InputStreamReader(

s.getInputStream(), "GB2312"));

out = new PrintWriter(new BufferedWriter(

new OutputStreamWriter(s.getOutputStream())), true);

new Thread(new ClientThread(input, wait, obj)).start();

} catch (UnknownHostException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

public static GraspClient getGraspTcp(){

if(gc == null){

gc = new GraspClient("192.168.0.128", 1212);

}

return gc;

}

// 取得响应

public String responseServer(){

if(line == null){

synchronized (obj) {

try {

System.out.println("等待数据");

obj.wait();

System.out.println("等待完毕");

} catch (InterruptedException e) {

e.printStackTrace();

}

obj.notifyAll();

}

}

String response = line;

line = null;

return response;

}

// 发送请求

public void requestServer(String request){

out.println(request);

}

// 关闭连接

public void close(){

try {

out.close();

input.close();

s.close();

} catch (IOException e) {

e.printStackTrace();

}

}
public void setLine(String line) {

this.line = line;

}

public void setWait(boolean wait){

this.wait = wait;

}

}

package Grasp;
import java.io.BufferedReader;

import java.io.IOException;
public class ClientThread implements Runnable{

private BufferedReader input;

private Object obj;

public ClientThread(BufferedReader input, boolean wait, Object obj){

this.input = input;

this.obj = obj;

}

public void run() {

try {

String line;

while((line = input.readLine()) != null){

GraspClient.getGraspTcp().setLine(line);

synchronized (obj) {

obj.notifyAll();

}

}

} catch (IOException e) {

System.out.println("线程出现异常");

}

}
}

package Grasp;
import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;
public class GraspServer {

public static void main(String[] args) {

try {

ServerSocket ss = new ServerSocket(12124);

while(true){

Socket s = ss.accept();

System.out.println("有连接");

new Thread(new ServerThread(s)).start();

}

} catch (IOException e) {

System.out.println(e);

}

}
}

package Grasp;
import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.Socket;
public class ServerThread implements Runnable {

private BufferedReader in;

private PrintWriter out;

public ServerThread(Socket s) {

try {

in = new BufferedReader(new InputStreamReader(

s.getInputStream(), "GB2312"));

out = new PrintWriter(new BufferedWriter(

new OutputStreamWriter(s.getOutputStream())), true);

} catch (IOException e) {

e.printStackTrace();

}

}
public void run() {

String line = null;

while((line = readFromClient()) != null){

System.out.println(line);

if(line.equals("select|1")){

out.println("电脑,0001,ME1,E1 苹果,0002,ME2,EN2 香蕉,0003,ME3,EN3 笔记本,0004,ME4,EN4 电话,0005,ME5,EN5|3");

}else if(line.equals("select|2")){

out.println("电脑,0006,ME6,E6 苹果,0007,ME7,EN7 香蕉,0008,ME8,EN8 笔记本,0009,ME9,EN9 电话,0010,ME10,EN10|3");

}else if(line.equals("select|3")){

out.println("电脑,0011,ME11,E11 苹果,00012,ME12,EN12 香蕉,00013,ME13,EN13 笔记本,00014,ME14,EN14 电话,0015,ME15,EN15|3");

}else{

out.println("错误指令");

}

}

}

public String readFromClient(){

try {

return in.readLine();

} catch (IOException e) {

e.printStackTrace();

}

return null;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: