简单介绍Socket通信

java Socket通信(一)

标签: socketjavaexceptionstring服务器class

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java socket通信已经被封装好了主要使用两个类ServerSocket 和Socket

首先写一个1v1的通信

服务端

[java] view plain copy

    /**
     *
     */
    package com.dnion.socket;  

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;  

    /**
     ***************************************************************
     * 项目名称:JavaThread
     * 程序名称:JabberServer
     * 日期:2012-8-23 上午11:36:12
     * 作者:
     * 模块:
     * 描述:
     * 备注:
     * ------------------------------------------------------------
     * 修改历史
     * 序号               日期              修改人       修改原因
     *
     * 修改备注:
     * @version
     ***************************************************************
     */
    public class JabberServer {  

        public static int PORT = 8080;
        public static void main(String[] agrs) {
            ServerSocket s = null;
            Socket socket = null;
            BufferedReader br = null;
            PrintWriter pw = null;
            try {
                //设定服务端的端口号
                s = new ServerSocket(PORT);
                System.out.println("ServerSocket Start:"+s);
                //等待请求,此方法会一直阻塞,直到获得请求才往下走
                socket = s.accept();
                System.out.println("Connection accept socket:"+socket);
                //用于接收客户端发来的请求
                br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                //用于发送返回信息,可以不需要装饰这么多io流使用缓冲流时发送数据要注意调用.flush()方法
                pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
                while(true){
                    String str = br.readLine();
                    if(str.equals("END")){
                        break;
                    }
                    System.out.println("Client Socket Message:"+str);
                    Thread.sleep(1000);
                    pw.println("Message Received");
                    pw.flush();
                }  

            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                System.out.println("Close.....");
                try {
                    br.close();
                    pw.close();
                    socket.close();
                    s.close();
                } catch (Exception e2) {  

                }
            }
        }
    } 

客户端

[java] view plain copy

    /**
     *
     */
    package com.dnion.socket;  

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.net.Socket;  

    /**
     ***************************************************************
     * 项目名称:JavaThread 程序名称:JabberClient 日期:2012-8-23 下午01:47:12
     * 作者:
     * 模块:
     * 描述:
     * 备注:
     * ------------------------------------------------------------
     * 修改历史
     * 序号
     * 日期
     * 修改人
     * 修改原因
     * 修改备注:
     *
     * @version
     ***************************************************************
     */
    public class JabberClient {  

        /**
         * 方法名:main 描述: 作者:白鹏飞 日期:2012-8-23 下午01:47:12
         *
         * @param @param args
         * @return void
         */
        public static void main(String[] args) {
            Socket socket = null;
            BufferedReader br = null;
            PrintWriter pw = null;
            try {
                //客户端socket指定服务器的地址和端口号
                socket = new Socket("127.0.0.1", JabberServer.PORT);
                System.out.println("Socket=" + socket);
                //同服务器原理一样
                br = new BufferedReader(new InputStreamReader(
                        socket.getInputStream()));
                pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
                        socket.getOutputStream())));
                for (int i = 0; i < 10; i++) {
                    pw.println("howdy " + i);
                    pw.flush();
                    String str = br.readLine();
                    System.out.println(str);
                }
                pw.println("END");
                pw.flush();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    System.out.println("close......");
                    br.close();
                    pw.close();
                    socket.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }  

    }  

这样一个简单地通信就完成了,这里我们要注意现在只能一对一通信。下面我们将使用多线程来实现多客户端通信的例子。

时间: 2024-10-16 21:06:49

简单介绍Socket通信的相关文章

Linux下简单的socket通信实例

Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Bruce Lee       学习网络编程也一段时间了,刚开始看<UNIX网络编程>的时候,觉得这本厚厚的书好难啊!看到后来,发现并没有想象中的那么难.如果你是新手,建议你看到第二部分结束后,开始着手写代码.不写代码肯定是不行的.看100遍也没有敲一遍实现一遍来的清楚.敲完以后,带着问题去看书,你会

C# 如何实现简单的Socket通信(附示例)

上周由于有个项目需要用到网络通信这块,然后就花了点时间研究了一下,本来想上周就写出来的,但是突然要忙,所以等到现在. 话说对于网络通信,以前写C++的时候,天天面对着线程和Socket,所以换成C#也就没那么怕了,虽然C++下也没有掌握的多好,但毕竟只是一个小Demo,只作为了解一下过程. 自己写了一个服务端和一个客户端,刚开始比较简单,只是能达到连通,收发信息的目的,但是很粗糙.而后稍加改进呢~加上了多线程,所以能感觉更科学一些,不过自己真的很菜,代码写的不是很好看,下面分两个版本给大家表出来

一个最简单的Socket通信例子

所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求.  Socket和ServerSocket类库位于java.net包中.ServerSocket用于服务器端,Socket是建立网络连接时使用的.在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话.对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别.不管是

简单的socket通信

//client#include <iostream> #include <WinSock2.h> #pragma comment(lib, "WS2_32") // 链接到WS2_32.lib using namespace std; int main() { SOCKET so; WSADATA ws; if (WSAStartup(MAKEWORD(2, 2), &ws) != 0) { cout << "WSAStartup

Java实现简单的socket通信

今天学习了一下java如何实现socket通信,感觉难点反而是在io上,因为java对socket封装已经很完善了. 今天代码花了整个晚上调试,主要原因是io的flush问题和命令行下如何运行具有package的类,不过最后问题基本都解决了,把代码贴出来供大家参考 server public class TcpServer { public static void main(String[] args) throws Exception { ServerSocket server = new S

C#版 Socket编程(最简单的Socket通信功能)

原文://http://blog.csdn.net/linybo/article/details/51141960 示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息:这里只是一个简单的示例,是一个最基本的socket编程流程,在接下来的文章中,会依次记录套接字的同步和异步,以及它们的区别. 第一步:用指定的端口号和服务器的ip建立一个EndPoint对像: 第二步:建立一个Socket对像: 第三步:用socket对像的Bind()方法绑定EndPo

[Boost]用asio编写简单的socket通信程序

boost/asio库中封装了很多关于scoket的函数,当然,asio库还包含很多底层的库. 我们可以用socket编写一个基于UDP协议的黑框通讯程序. 要想使用asio里面的函数,大多都需要先创建一个io_service对象,然后通过这个serveice来构造不同的对象,所以第一步,我们得创建两个对象: boost::asio::io_service io_service; boost::asio::ip::udp::socket udp_socket(io_service); 这里唯一需

一个简单的socket通信小demo

写了一个socket的程序,可以和本地的服务器进行通信,要先和服务器建立链接,然后发送登录信息,验证成功,就可以和服务器通信了 1 页面截图 2 点击链接服务器,可以链接服务器,服务器的ip地址为:127.0.0.1 端口为 12345: 3 点击链接服务器之后,打印信息如下 4 点击登录,会向服务器发送登录信息: iam:zhangsan, 然后会客户端会显示登录成功 5 比如输入chongqingyoudian  6 在服务器控制台就能看到客户端发送的信息 客户端代码如下 1 // 2 //

一个简单的Socket通信Demo

都忘了哪里下的了,留个记录 服务器端Demo: Server.java(服务器端运行主程序,直接运行): package cn.wjs; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; public class Server { private static final int port = 9999; private static final int backlog = 100