(java)socket全双工长连接通信实例
2016-07-12 20:25
405 查看
(借鉴备忘)直接上代码:
client:
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Reader;
import java.net.Socket;
import java.nio.CharBuffer;
public class TestSocketClient {
public static void main(String[] args) {
// TODO Auto-generated method stub
new TestSocketClient().start();
}
class SendThread extends Thread{
private Socket socket;
public SendThread(Socket socket){
this.socket=socket;
}
@Override
public void run(){
while(true){
try{
Thread.sleep(1000);
String send="<SOAP-ENV:Envelope>"+System.currentTimeMillis()+"</SOAP-ENV:Envelope>";
PrintWriter pw=new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
pw.write(send);
pw.flush();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
class ReceiveThread extends Thread{
private Socket socket;
public ReceiveThread(Socket socket){
this.socket=socket;
}
@Override
public void run(){
while(true){
try{
Reader reader=new InputStreamReader(socket.getInputStream());
CharBuffer charbuffer=CharBuffer.allocate(8192);
int index=-1;
while((index=reader.read(charbuffer))!=-1){
charbuffer.flip();//设置从0到刚刚读取到的位置
System.out.println("client:"+charbuffer.toString());
}
}catch(Exception e){
e.printStackTrace();
}
}
}
}
public void start(){
try{
Socket socket=new Socket("127.0.0.1",18889);
new SendThread(socket).start();
new ReceiveThread(socket).start();
}catch(Exception e){
e.printStackTrace();
}
}
}
server:
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.CharBuffer;
import java.util.Date;
public class TestSocketServer {
private final static String SOAP_BEGIN = "<SOAP-ENV:Envelope";
private final static String SOAP_END = "</SOAP-ENV:Envelope>";
public static void main(String[] args) {
// TODO Auto-generated method stub
TestSocketServer testserver=new TestSocketServer();
testserver.start();
}
public void start(){
try{
ServerSocket serversocket=new ServerSocket(18889);
while(true){
Socket socket=serversocket.accept();
new SocketThread(socket).start();
}
}catch(Exception e){
e.printStackTrace();
}
}
class SocketThread extends Thread{
private Socket socket;
private String temp;
public SocketThread(Socket socket){
this.socket=socket;
}
public Socket getsocket(){
return this.socket;
}
public void setsocjet(Socket socket){
this.socket=socket;
}
@Override
public void run(){
try{
Reader reader=new InputStreamReader(socket.getInputStream());
Writer writer=new PrintWriter(new OutputStreamWriter(socket.getOutputStream(),"GBK"));
CharBuffer charbuffer=CharBuffer.allocate(8192);
int readindex=-1;
while((readindex=reader.read(charbuffer))!=-1){
charbuffer.flip();
temp+=charbuffer.toString();
if(temp.indexOf(SOAP_BEGIN)!=-1 && temp.indexOf(SOAP_END)!=-1){
//System.out.println(new Date().toLocaleString()+"server:"+temp);
temp="";
writer.write("receive the soap message hahahah");
writer.flush();
}else if(temp.indexOf(SOAP_BEGIN)!=-1){
temp=temp.substring(temp.indexOf(SOAP_BEGIN));
}
if(temp.length()>1024*16){
break;
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(socket!=null){
try{
if(!socket.isClosed()){
socket.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
}
}
}
client:
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Reader;
import java.net.Socket;
import java.nio.CharBuffer;
public class TestSocketClient {
public static void main(String[] args) {
// TODO Auto-generated method stub
new TestSocketClient().start();
}
class SendThread extends Thread{
private Socket socket;
public SendThread(Socket socket){
this.socket=socket;
}
@Override
public void run(){
while(true){
try{
Thread.sleep(1000);
String send="<SOAP-ENV:Envelope>"+System.currentTimeMillis()+"</SOAP-ENV:Envelope>";
PrintWriter pw=new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
pw.write(send);
pw.flush();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
class ReceiveThread extends Thread{
private Socket socket;
public ReceiveThread(Socket socket){
this.socket=socket;
}
@Override
public void run(){
while(true){
try{
Reader reader=new InputStreamReader(socket.getInputStream());
CharBuffer charbuffer=CharBuffer.allocate(8192);
int index=-1;
while((index=reader.read(charbuffer))!=-1){
charbuffer.flip();//设置从0到刚刚读取到的位置
System.out.println("client:"+charbuffer.toString());
}
}catch(Exception e){
e.printStackTrace();
}
}
}
}
public void start(){
try{
Socket socket=new Socket("127.0.0.1",18889);
new SendThread(socket).start();
new ReceiveThread(socket).start();
}catch(Exception e){
e.printStackTrace();
}
}
}
server:
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.CharBuffer;
import java.util.Date;
public class TestSocketServer {
private final static String SOAP_BEGIN = "<SOAP-ENV:Envelope";
private final static String SOAP_END = "</SOAP-ENV:Envelope>";
public static void main(String[] args) {
// TODO Auto-generated method stub
TestSocketServer testserver=new TestSocketServer();
testserver.start();
}
public void start(){
try{
ServerSocket serversocket=new ServerSocket(18889);
while(true){
Socket socket=serversocket.accept();
new SocketThread(socket).start();
}
}catch(Exception e){
e.printStackTrace();
}
}
class SocketThread extends Thread{
private Socket socket;
private String temp;
public SocketThread(Socket socket){
this.socket=socket;
}
public Socket getsocket(){
return this.socket;
}
public void setsocjet(Socket socket){
this.socket=socket;
}
@Override
public void run(){
try{
Reader reader=new InputStreamReader(socket.getInputStream());
Writer writer=new PrintWriter(new OutputStreamWriter(socket.getOutputStream(),"GBK"));
CharBuffer charbuffer=CharBuffer.allocate(8192);
int readindex=-1;
while((readindex=reader.read(charbuffer))!=-1){
charbuffer.flip();
temp+=charbuffer.toString();
if(temp.indexOf(SOAP_BEGIN)!=-1 && temp.indexOf(SOAP_END)!=-1){
//System.out.println(new Date().toLocaleString()+"server:"+temp);
temp="";
writer.write("receive the soap message hahahah");
writer.flush();
}else if(temp.indexOf(SOAP_BEGIN)!=-1){
temp=temp.substring(temp.indexOf(SOAP_BEGIN));
}
if(temp.length()>1024*16){
break;
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(socket!=null){
try{
if(!socket.isClosed()){
socket.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
}
}
}
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Linux socket 初步
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序