(借鉴备忘)直接上代码:
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();
}
}
}
}
}
}