`

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[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 源码:
分享到:
评论

相关推荐

    iOS_Socket_即时通讯Demo

    iOS客户端和服务器,基于AsyncSocket, 相互通信、即时通讯

    基于vc socket tcp 协议 简单 聊天 通讯 源程序代码

    基于vc socket tcp 协议 简单 聊天 通讯程序 可实现服务器与客户端相互通信,可连续发送消息,发送后即时收到。

    SOCKET简单本地服务器连接实现多台设备实时通讯-源码+注释

    用socket套接字实现简易服务器的建立与数据的传输 内含:mysocket.h -- socket功能的简化与重定义,更加方便; server.cpp -- 服务端源代码 client.cpp -- 客户端源代码 使用方式:编译后使用两台不同设备,分别...

    简单的基于Unity3D的Socket通讯

    简单的基于Unity的客户端连接服务器端,相互发送一次数据,文档描述位于http://blog.sina.com.cn/s/blog_1322690230102y3l4.html

    WINDOWS socket编程整合版

    Windows Sockets 规范以 U.C. Berkeley 大学 BSD UNIX 中流行的 ...应用程序调用 Windows Sockets 的 API 实现相互之间的通讯。Windows Sockets 又利用 下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。

    c语言实现socket网络编程简单的TCP/IP客户服务器连接

    用c语言实现简单的socket网络编程TCP/IP客户服务器的连接,并实现两者直接的相互通信

    linux socket最简单实现server和client通讯(I/O复用)

    本人写的 server.c和 client.c 供大家下载学习 如有问题,或相互学习 加Q 335025033

    socket编程集萃

    事实上网络编程简单的理解就是两台计算机相互通讯数据而已,对于程序员而言,去掌握一种编程接口并使用一种编程模型相对就会显得简单的多了,Java SDK提供一些相对简单的Api来完成这些工作。Socket就是其中之一,...

    Windows通讯基础库WCF.zip

    WCF 整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术。是Windows平台上开发分布式应用最佳的实践方式。简单的归结为四大部分1&gt;.网络服务的协议,即用什么网络协议...

    Hprose 全名是高性能远程对象服务引擎.rar

    RPC 会隐藏底层的通讯细节(不需要直接处理 Socket 通讯或 Http 通讯) RPC 是一个请求响应模型。客户端发起请求,服务器返回响应(类似于 Http 的工作方式) RPC 在使用形式上像调用本地函数(或方法)一样去调用...

    java实现一个简单的即时通讯工具的设计与开发(源代码+论文)

    一般来说,聊天工具大多数由客户端程序和服务器程序,外加服务器端用于存放客户数据的数据库组成,本系统采用客户机/服务器架构模式,通过Java提供的Socket类来连接客户机和服务器并使客户机和服务器之间相互通信。

    winsock简单介绍

    应用程序调用Windows Sockets的API实现相互之间的通讯。Windows Sockets又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。它们之间的关系如图  通信的基础是套接口(Socket),一个套接口是通讯的...

    基于JAVA的网络通讯系统设计与实现(论文+系统).zip

    一般来说,聊天工具大多数由客户端程序和服务器程序,外加服务器端用于存放客户数据的数据库组成,本系统采用客户机/服务器架构模式,通过Java提供的Socket类来连接客户机和服务器并使客户机和服务器之间相互通信,...

    基于JAVA的网络通讯系统设计与实现(WORD论文文档+系统).zip

    一般来说,聊天工具大多数由客户端程序和服务器程序,外加服务器端用于存放客户数据的数据库组成,本系统采用客户机/服务器架构模式,通过Java提供的Socket类来连接客户机和服务器并使客户机和服务器之间相互通信,...

    网络编程论文

    网络编程简单的理解就是两台计算机相互通讯数据而已,对于程序员而言,去掌握一种编程接口并使用一种编程模型相对就会显得简单的多,Java SDK提供一些相对简单的Api来完成这些工作。Socket就是其中之一,对于Java而...

    基于JAVA的网络通讯系统设计与实现(论文+系统)

    一般来说,聊天工具大多数由客户端程序和服务器程序,外加服务器端用于存放客户数据的数据库组成,本系统采用客户机/服务器架构模式,通过Java提供的Socket类来连接客户机和服务器并使客户机和服务器之间相互通信,...

    基于java的网络通讯系统设计与实现毕业设计(项目报告+系统).zip

    一般来说,聊天工具大多数由客户端程序和服务器程序,外加服务器端用于存放客户数据的数据库组成,本系统采用客户机/服务器架构模式,通过Java提供的Socket类来连接客户机和服务器并使客户机和服务器之间相互通信,...

    毕业设计-基于JAVA的网络通讯系统设计与实现(论文+系统)

    一般来说,聊天工具大多数由客户端程序和服务器程序,外加服务器端用于存放客户数据的数据库组成,本系统采用客户机/服务器架构模式,通过Java提供的Socket类来连接客户机和服务器并使客户机和服务器之间相互通信,...

    WinSock技术原理-很详细是个集合

    第一章 简介 1.1 什么是Windows Sockets规范? Windows Sockets规范以U.C.... 应用程序调用Windows Sockets的API实现相互之间的通讯。Windows Sockets又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。

Global site tag (gtag.js) - Google Analytics