蜗牛/ 发表于 2013-1-27 13:13:54

Socket 简单的相互通讯

TCPEchoServer
package com.mz.xx.code.atest;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;import java.net.SocketAddress;public class TCPEchoServer {      private static final int BUFSIZE = 32;      public static void main(String[] args) throws IOException{                        int servPort = 7788;                  ServerSocket servSock = new ServerSocket(servPort);                        int recvMsgSize;            byte[] receiveBuf = new byte;                        while(true){                Socket clntSock = servSock.accept();                              SocketAddress clientAddress = clntSock.getRemoteSocketAddress();                System.out.println("Handling client at" + clientAddress);                              InputStream in = clntSock.getInputStream();                OutputStream out = clntSock.getOutputStream();                              while((recvMsgSize = in.read(receiveBuf))!=-1){                  System.out.println("IN...");                  out.write(receiveBuf,0,recvMsgSize);                  out.flush();                  System.out.println("Sended:"+new String(receiveBuf)+"\t"+recvMsgSize);                }                clntSock.close();            }      }}

TCPEchoClient
package com.mz.xx.code.atest;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.net.SocketException;import java.net.UnknownHostException;public class TCPEchoClient {    public static void main(String[] args) throws UnknownHostException,            IOException {      String server = "localhost";      byte[] data = "abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ".getBytes();                int servPort = 7788;      Socket socket = new Socket(server, servPort);      System.out.println("Connected to server...sending echo string");      InputStream in = socket.getInputStream();      OutputStream out = socket.getOutputStream();      out.write(data);      int totalBytesRcvd = 0;      int bytesRcvd;      byte[] dataArray = new byte;                        /**         * 以前学习socket,对于消息的读取也就用一个read().最近在学一本socke编程的书籍,书中这样写到:         * TCP协议并不能确定在read() 和 write() 方法中所发送信息的界限,也就是说,虽然我们只用勒一个         * write()方法来发送回馈字符串,回馈服务器也可以从多个块中接受该信息。即使回馈字符串在服务器         * 上存在于一个块中,在返回的时候,也可能被TCP协议分割成多个部分。对于初学者来说,最常见的错误         * 就是认为由一个write()方法发送的数据总是会由一个read()方法来接受。         *          */      while (totalBytesRcvd < dataArray.length) {            if ((bytesRcvd = in.read(dataArray, totalBytesRcvd, data.length                  - totalBytesRcvd)) == -1)                throw new SocketException("Connection closed prematurely");            totalBytesRcvd += bytesRcvd;      }//data array is full      System.out.println("Received: " + new String(dataArray)+"\t"+dataArray.length);      socket.close();    }}

Java TCP/IP Socket 源码:
页: [1]
查看完整版本: Socket 简单的相互通讯