使用java实现Server和Client(TCP)

Server.java

import java.io.*;
import java.net.*;

public class Server {

    public static final int PORT=8888;

    public void Server() throws IOException {
        ServerSocket ss = new ServerSocket(PORT);
        InetAddress ia = InetAddress.getByName(null);

        System.out.println("[email protected]"+ia+" start!");

        try{
            while(true){
                Socket s = ss.accept();// listen PORT;
                try{
                    new ServerOne(s);
                } catch (IOException e) {
                    s.close();
                }
            }
        }finally{
            ss.close();
            System.out.println("Server stop!");
        }
    }
}

class ServerOne extends Thread {
    private Socket s;
    private BufferedReader in;
    private PrintWriter out;
    public ServerOne(Socket s) throws IOException {
        this.s = s;
        in = new BufferedReader(new InputStreamReader(s.getInputStream()));
        out = new PrintWriter(new BufferedWriter
                (new OutputStreamWriter(s.getOutputStream())), true);
        start();
    }
    public void run(){
        try {
            while(true) {
                String str = in.readLine();
                if(str.equals("end")) break;
                System.out.println("Server: receive information"+str);
                out.println("Echo: "+str);
            }
            System.out.println("closing....");
        } catch (IOException e){
        } finally {
            try{
                s.close();
            }catch(IOException e){}
        }
    }
}

Client.java:

import java.io.*;
import java.net.*;

public class Client extends Thread {
    static final int MAX_THREADS=25;
    private static int id = 0;
    private static int threadCount = 0;
    private Socket s;
    private BufferedReader in;
    private PrintWriter out;

    public static int getThreadCount(){
        return threadCount;
    }

    public Client(InetAddress ia){
        threadCount++;
        id++;
        System.out.println("Making client: " + id);
        try{
            s = new Socket(ia, Server.PORT);
        } catch (IOException e) {}
        try{
            in = new BufferedReader(new InputStreamReader(s.getInputStream()));
            out = new PrintWriter(new BufferedWriter
                    (new OutputStreamWriter(s.getOutputStream())), true);
            start();
        }catch(IOException e1){
            try{
                s.close();
            }catch(IOException e2){
                System.out.println("Error in Client\n");
            }
        }

    }

    public void run() {
        try{
            String str;
            for(int i = 0; i < 5; i++) {
                out.println("Client #"+id+":"+i);
                str=in.readLine();
                System.out.println("Client: send message#"+id+":"+i+"\n"
                        +"Server reply: "+str);
            }
            out.println("end");
        }catch(IOException e){
        }finally{
            try {
                s.close();
            } catch (IOException e){}
        }
    }

    public static void main(String args[]) throws IOException, InterruptedException {
        InetAddress ia = InetAddress.getByName(null); //null mean localhost
        while(true){
            if(getThreadCount() < MAX_THREADS)
                new Client(ia);
            else break;
            Thread.currentThread().sleep(10);
        }
    }
}
时间: 2024-11-10 16:42:46

使用java实现Server和Client(TCP)的相关文章

TCP连接的状态与关闭方式及其对Server与Client的影响

1. TCP连接的状态 首先介绍一下TCP连接建立与关闭过程中的状态.TCP连接过程是状态的转换,促使状态发生转换的因素包括用户调用.特定数据包以及超时等,具体状态如下所示: CLOSED:初始状态,表示没有任何连接.LISTEN:Server端的某个Socket正在监听来自远方的TCP端口的连接请求.SYN_SENT:发送连接请求后等待确认信息.当客户端Socket进行Connect连接时,会首先发送SYN包,随即进入SYN_SENT状态,然后等待Server端发送三次握手中的第2个包.SYN

Java: server/client 心跳机制实现 示例

心跳机制 心跳机制是定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性的机制. 大部分CS的应用需要心跳机制.心跳机制一般在Server和Client都要实现,两者实现原理基本一样.Client不关心性能,怎么做都行. 如果应用是基于TCP的,可以简单地通过SO_KEEPALIVE实现心跳.TCP在设置的KeepAlive定时器到达时向对端发一个检测TCP segment,如果没收到ACK或RST,尝试几次后,就认为对端已经不存在,最后通知应用程序.这里有个缺点是,S

TCP连接的状态与关闭方式,及其对Server与Client的影响

1. TCP连接的状态 首先介绍一下TCP连接建立与关闭过程中的状态.TCP连接过程是状态的转换,促使状态发生转换的因素包括用户调用.特定数据包以及超时等,具体状态如下所示: CLOSED:初始状态,表示没有任何连接. LISTEN:Server端的某个Socket正在监听来自远方的TCP端口的连接请求. SYN_SENT:发送连接请求后等待确认信息.当客户端Socket进行Connect连接时,会首先发送SYN包,随即进入SYN_SENT状态,然后等待Server端发送三次握手中的第2个包.

TCP server和client的一些测试

一.TCP server和client测试   socket设置 测试项/测试情景 send recv 测             server block           client block                                                                                              

解决Linux 下server和client 通过TCP通讯:accept成功接收却报错的问题

今天在写简单的TCP通讯例子的时候,遇到了一个问题:server 和client能够连接成功,并且client也能够正常发送,但server就是接收不到,在网上搜索一番后,终于解决了问题.在这里整理如下: 大家要注意的是,一个server端可以连接多个client端,server端的accept()函数负责等待并接收client的连接请求,而且accept()函数将不同client端的sockfd作为返回值.为了保证接收到对应的client端数据,所以在client连接成功且使用recv()函数

java.sql.SQLException: Unknown initial character set index &#39;255&#39; received from server. Initial client character set can be forced via the &#39;characterEncoding&#39; property.解决方案

解决方案: 首先查看数据库的版本号,删除旧的jar包,将mysql-connector-java.jar更换成对应版本号 同时在连接数据库的url后加上?useUnicode=true&characterEncoding=utf-8 java.sql.SQLException: Unknown initial character set index '255' received from server. Initial client character set can be forced via

TCP server和client

一.server和client整体流程(及Unix下的socket API) 1. int socket(int domain, int type, int protocol); 根据指定的地址族.数据类型和协议来分配一个socket的描述字及其所用的资源. domain:协议族,常用的有AF_INET.AF_INET6.AF_LOCAL.AF_ROUTE其中AF_INET代表使用ipv4地址 注: 头文件socket.h中有 #define AF_INET PF_INET type:socke

用java网络编程中的TCP方式上传文本文件及出现的小问题

自己今天刚学java网络编程中的TCP传输,要用TCP传输文件时,自己也是遇到了一些问题,抽空把它整理了一下,供自己以后参考使用. 首先在这个程序中,我用一个客户端,一个服务端,从客户端上传一个文本文件给服务端,服务端接收数据并显示“上传成功”给客户端. 客户端: 1 import java.io.BufferedReader; 2 import java.io.FileReader; 3 import java.io.IOException; 4 import java.io.InputStr

使用Jetty搭建Java Websocket Server,实现图像传输

https://my.oschina.net/yushulx/blog/298140 How to Implement a Java WebSocket Server for Image Transmission with Jetty 创建一个从WebSocketHandler继承的类WSHandler: import org.eclipse.jetty.websocket.api.Session; import org.eclipse.jetty.websocket.api.annotatio