假设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 作为分割符号

解决方案 »

  1.   

    也没什么啊
    就按照一般的socket连接处理就ok啦
    发送---接受---关闭连接
      

  2.   

    import java.io.*;
    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) {}

    }
    }
    大概是这样的,因为没有测试,可能有些错误.见谅吧!
      

  3.   

    楼主,我觉得你应该定义报文体结构。
    最好不要使用“;”来分割字段。比如:
    请求报文定义
    固定字段 Char(3)  固定为“AID”
    流水号   Char(16) 若不足16位,后补"\0"
    ..
    这样定义报文之后,报文是定长的,处理起来相对会好一些。
    具体代码应该是比较简单的。
      

  4.   

    感谢各位的意见...to irvine007:服务器端是由别人做的,定好了数据格式,这边只能跟着那么做!
      

  5.   

    qnzzzz(落花时节) 谢谢你的程序,编译没有有错误,能否再加上注释呢?而且我只看到你解释了返回的数据,但没看到你如何把我Client这边的字符串(如V;ID;000001)传送到Server那边的!
      

  6.   

    自己顶一下,再详细说下自己的要求:
    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;
       } }
      

  7.   

    服务器端与客户端的Socket通信(接收,发送消息)均是在流中通过套接字socket来实现的。
    服务器端构造Socket时只需指出其端口号,而客户端构造Socket时需端口号和服务器的IP地址。
    在双方连接通过IO通信后,结束的判断是根据自定义(如:"\n"来作为结束符)来进行的。
      

  8.   

    *****
                 在这里,把String strClient = "V;ID;000001"传到服务器那端,服务器处理之后就 会反馈信息回来,我把反馈信息再return 出来,就这样,我现在想问的是,这里怎么发送到服务器端的?    *****
     
    通过把要发送的消息赋值给一字符串,然后将该字符串转化为相应的字节,通过OutputStream(或其某子类)输出流发送到服务器端的。
    在服务器端再进行上述的反操作,还原为相应的字符的。流的结束判断根据自定义方式(如:"\n"来作为结束符)
      

  9.   

    那请问是如何把"V;ID;000001\n"这段字符串传到服务器端的呢?
      

  10.   

    silverend(白银末裔) :能否帮我完善客户端的代码编写呢?
      

  11.   

    tpz_stamp(Stamp) 写的很清楚了