Client(客户端) / Server(服务端) 程序

1. 客户端程序

import java.io.*;

import java.net.*;

public class Client {

  public static void main(String args[]) {

     try{

       Socket socket=new Socket("127.0.0.1",4700);

       //向本机的4700端口发出客户请求

       BufferedReader in=new BufferedReader(new InputStreamReader(System.in));

        //由系统标准输入设备构造BufferedReader对象

       PrintWriter os=new PrintWriter(socket.getOutputStream());

        //由Socket对象得到输出流,并构造PrintWriter对象

        BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));

        //由Socket对象得到输入流,并构造相应的BufferedReader对象
                         //从系统标准输入读入一字符串
        String readline=sin.readLine(); 

       while(!readline.equals("bye")){

        //若从标准输入读入的字符串为 "bye"则停止循环

          os.println(readline);

          //将从系统标准输入读入的字符串输出到Server

          os.flush();

          //刷新输出流,使Server马上收到该字符串

          System.out.println("Client:"+readline);

          //在系统标准输出上打印读入的字符串

          System.out.println("Server:"+is.readLine());

          //从Server读入一字符串,并打印到标准输出上

          readline=sin.readLine(); //从系统标准输入读入一字符串

        } //继续循环

        os.close(); //关闭Socket输出流

        is.close(); //关闭Socket输入流

        socket.close(); //关闭Socket

      }catch(Exception e) {

        System.out.println("Error"+e); //出错,则打印出错信息

      }

  }

}    

Client

2. 服务器端程序

      import java.io.*;

  import java.net.*;

  import java.applet.Applet;

  public class TalkServer{

    public static void main(String args[]) {

                      ServerSocket server=null;
                      Socket socket=null;
                      String line;

      try{

          //创建一个ServerSocket在端口4700监听客户请求
                       server=new ServerSocket(4700);

                       //使用accept()阻塞等待客户请求,有客户
         //请求到来则产生一个Socket对象,并继续执行

         socket=server.accept();
        
                       //由Socket对象得到输入流,并构造相应的BufferedReader对象
        BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));

                  //由Socket对象得到输出流,并构造PrintWriter对象
        PrintWriter os=newPrintWriter(socket.getOutputStream());

                        //由系统标准输入设备构造BufferedReader对象
        BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));

                        //在标准输出上打印从客户端读入的字符串
        System.out.println("Client:"+is.readLine());

        //从标准输入读入一字符串
        line=sin.readLine();

        //如果该字符串为 "bye",则停止循环

        while(!line.equals("bye")){

          //向客户端输出该字符串
          os.println(line);

          //刷新输出流,使Client马上收到该字符串
          os.flush();

          //在系统标准输出上打印读入的字符串
          System.out.println("Server:"+line);

          //从Client读入一字符串,并打印到标准输出上
          System.out.println("Client:"+is.readLine());

          //从系统标准输入读入一字符串
          line=sin.readLine();

        }  //继续循环

      }catch(Exception e){

        System.out.println("Error:"+e);

        //出错,打印出错信息

      }finally{
                        os.close(); //关闭Socket输出流

        is.close(); //关闭Socket输入流

        socket.close(); //关闭Socket

        server.close(); //关闭ServerSocket
                  }

    }

  }                                     

Server

支持多客户的client/server程序

  前面的Client/Server程序只能实现Server和一个客户的对话。在实际应用中,往往是在服务器上运行一个永久的程序,它可以接收来自其他多个客户端的请求,提供相应的服务。为了实现在服务器方给多个客户提供服务的功能,需要对上 面的程序进行改造,利用多线程实现多客户机制。服务器总是在指定的端口上监听是否有客户请求,一旦监听到客户请求,服务器就会启动一个专门的服务线程来响 应该客户的请求,而服务器本身在启动完线程之后马上又进入监听状态,等待下一个客户的到来。

时间: 2024-08-04 18:24:09

Client(客户端) / Server(服务端) 程序的相关文章

用socaket编写客户端与服务端程序相互发送消息

//运行环境:eclipse || MyEclipse package socaket; //这些类全放在socaket的包下 //这是服务器端消息发送类 import java.io.IOException;import java.io.PrintWriter;import java.net.Socket;import java.util.Scanner; public class ServerChatSend extends Thread {//服务端发送线程 Socket ssk = nu

python3中实现客户端与服务端交互发送文件

在python3中实现客户端与服务端程序交互,从客户端发送文件到服务端 客户端代码:client.py #!/usr/bin/env python #_*_ encoding=utf-8 _*_ import socket,sys,os ip_port = ('127.0.0.1',9999) sk = socket.socket() sk.connect(ip_port) container = {'key':'','data':''} while True:     input_data =

socket的客户端和服务端(Windows控制台程序)

首先是两个程序,分别是socket的客户端和服务端.(在windows系统vc6.0编译)服务器端:#include <Winsock2.h>#include <stdio.h>#pragma comment(lib,"WS2_32.lib")void main(){    WSADATA wsd;    SOCKET server;                                            //服务器socket    SOCKAD

[Java]命令行模拟TCP客户端与服务端的简单小程序遇到的问题(基础不牢!扎实和亲手实践比什么都重要!)

简单得不能再简单的需求: 简单模拟TCP客户端与服务端的一次连接和通信,客户端发出一个消息,服务端回馈一个消息 自己第一次编写的代码: Client: class TcpClient1 { public static void main(String[] args) throws Exception { Socket s=new Socket("127.0.0.1",10010); OutputStream out=s.getOutputStream(); out.write(&quo

SVN--VisualSVN server 服务端和 TortoiseSVN客户端的基础使用

前言 在上一文http://www.cnblogs.com/wql025/p/5177699.html中,我们讲到了使用SVN的第一步,即下载.安装SVN的服务端软件--VisualSVN server和客户端软件--TortoiseSVN.现在,我们就来在此基础上学习怎样使用这两个软件的最基础的功能以及在eclipse上如何使用. 本文参考网址:http://blog.chinaunix.net/uid-26520343-id-3047514.html 首先,和oracle一样,用SVN服务端

SVN服务器搭建和使用(一)--下载、安装VisualSVN server 服务端和 TortoiseSVN客户端

前言: 在http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2407610.html的博客中已经很详细地介绍了SVN的服务器--VisualSVN server和客户端--TortoiseSVN的下载与安装.但笔者在按照其中的方法进行下载.安装时发现了此文遗漏了一些重要的细节,所以本文在搬运原文的基础上补上一些遗漏的细节,帮助读者只需看本页面即可完成所有的工作,而不必像我之前那样百度好几个才弄好.   一.SVN服务器--VisualSV

QT server服务端如何判断客户端断开连接

在QT编程中有时会用到server服务端与客户端进行TCP网络通信,服务端部分代码如下: 1.创建server用于监听客户端套接字 this->server = new QTcpServer(this); this->server->listen(QHostAddress::Any,5001); connect(this->server,SIGNAL(newConnection()),this,SLOT(newConnection())); 2.newConnection()函数

超级轻量的远程命令行客户端和服务端(含文件传输)

功能:实现基于TCPIP的命令行操作远程计算机,并且支持远程文件传输 平台:windows   (linux同理) 原理:客户端连接上服务端之后,先监听键盘输入,将键盘输入的cmd指令保存并发送给服务端:服务端保存并通过调用命令行执行,获取命令行执行结果发送给客户端.如果是   获取文件命令,则读取文件,并将文件发送给客户端 代码:源码下载链接 // 核心代码 int getfile(const char *path,SOCKET ClientSocket,const char *file) {

Netty入门之客户端与服务端通信(二)

Netty入门之客户端与服务端通信(二) 一.简介 在上一篇博文中笔者写了关于Netty入门级的Hello World程序.书接上回,本博文是关于客户端与服务端的通信,感觉也没什么好说的了,直接上代码吧. 二.客户端与服务端的通信 2.1 服务端启动程序 public class MyServer { public static void main(String[] args) throws InterruptedException { EventLoopGroup bossGroup = ne