六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 40|回复: 0

Socket 简单的相互通讯

[复制链接]

升级  66%

7

主题

7

主题

7

主题

童生

Rank: 1

积分
33
 楼主| 发表于 2013-1-27 13:13:54 | 显示全部楼层 |阅读模式
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[BUFSIZE];                        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[data.length];                        /**         * 以前学习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 源码:
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表