假设socket始终不关闭
client代码:
String strClient = "V;ID;000001\n";
outputStream.write(strClient.getBytes());
outputStream.flush();
int abyte = -1;
while( (abyte = inputStream.read()) != -1) {
if(abyte == 10)
break;
strBuffer.append( (char)abyte );
}String response = strBuffer.toString();请求和返回都用 \n 作为分割符号
client代码:
String strClient = "V;ID;000001\n";
outputStream.write(strClient.getBytes());
outputStream.flush();
int abyte = -1;
while( (abyte = inputStream.read()) != -1) {
if(abyte == 10)
break;
strBuffer.append( (char)abyte );
}String response = strBuffer.toString();请求和返回都用 \n 作为分割符号
就按照一般的socket连接处理就ok啦
发送---接受---关闭连接
import java.net.*;
import java.util.StringTokenizer;
public class Client{
final static public int PORT=8000;
final static public String SERVER="server_name";
private Socket sock=null;
private DataInputStream in=null;
private DataOutputStream out=null;
public Client() throws UnknownHostException, IOException{
sock=new Socket(SERVER,PORT);
in=new DataInputStream(new BufferedInputStream(sock.getInputStream()));
out=new DataOutputStream(new BufferedOutputStream(sock.getOutputStream()));
}
private void talk() throws IOException{
String[] request=new String[3];
String response="AV;";
StringTokenizer msg=new StringTokenizer(in.readLine(),";");
for(int i=0;i<3;i++)
request[i]=msg.nextToken();
//这里可以根据判断服务器发来的数据request内容来进行相应的回复了
//假设你的判断结果为AV;0001
response+="0001";
out.writeChars(response);
}
private void closeAll() throws IOException{
in.close();
out.close();
sock.close();
}
public void start() throws IOException{
this.talk();
this.closeAll();
}
public static void main(String args[]){
try {
Client client=new Client();
client.start();
} catch (UnknownHostException e) {}
catch (IOException e) {}
}
}
大概是这样的,因为没有测试,可能有些错误.见谅吧!
最好不要使用“;”来分割字段。比如:
请求报文定义
固定字段 Char(3) 固定为“AID”
流水号 Char(16) 若不足16位,后补"\0"
..
这样定义报文之后,报文是定长的,处理起来相对会好一些。
具体代码应该是比较简单的。
import java.io.*;
import java.net.*;public class Client {
public String Send_Post(String Str) {
String st="nihao";
try{
Socket ClientSocket= new Socket("192.168.0.11",9000); //将客户端的信息发送给服务器 *****
在这里,把String strClient = "V;ID;000001"传到服务器那端,服务器处理之后就 会反馈信息回来,我把反馈信息再return 出来,就这样,我现在想问的是,这里怎么发送到服务器端的? *****
InputStream s1In=ClientSocket.getInputStream(); //得到服务器端的信息
DataInputStream dis=new DataInputStream(s1In);
st=new String(dis.readUTF());
dis.close();
s1In.close();
ClientSocket.close();
}catch(IOException e){
System.out.println("Exception="+e);
} return st;
} }
服务器端构造Socket时只需指出其端口号,而客户端构造Socket时需端口号和服务器的IP地址。
在双方连接通过IO通信后,结束的判断是根据自定义(如:"\n"来作为结束符)来进行的。
在这里,把String strClient = "V;ID;000001"传到服务器那端,服务器处理之后就 会反馈信息回来,我把反馈信息再return 出来,就这样,我现在想问的是,这里怎么发送到服务器端的? *****
通过把要发送的消息赋值给一字符串,然后将该字符串转化为相应的字节,通过OutputStream(或其某子类)输出流发送到服务器端的。
在服务器端再进行上述的反操作,还原为相应的字符的。流的结束判断根据自定义方式(如:"\n"来作为结束符)