Java学习【网络编程】

博客:http://blog.csdn.net/muyang_ren


发送与接收线程
Recv.java

package lhy.socket.server;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class Recv implements Runnable{

    String  str = null;
    private Socket            client    = null;
    private InputStreamReader recv      = null;
    private BufferedReader    reader    = null;

    public Recv(Socket c) {
        this.client = c;
    }

    public void run() {
        System.out.println("recv thread");
        //System.out.flush();
        try {
            recv    =   new InputStreamReader(client.getInputStream());
            reader  =   new BufferedReader(recv);
            while (!client.isClosed()) {
                str = reader.readLine();
                System.out.println(str);
            }
            client.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Send.java

package lhy.socket.server;

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class Send implements Runnable{
    private Socket client = null;
    private static OutputStreamWriter send = null;
    private static PrintWriter writer = null;
    Scanner sin = null;
    String  msgstr = null;
    String  sendstr = null;

    //c :客户端或者服务器套接字
    //str : 存放客户端或者服务器发送过来的字符串:Server 或者 Client
    public Send(Socket c,String str) {
        this.client  = c;
        this.sendstr = str;
    }

    public void run() {
        System.out.println("send thread");
        sin = new Scanner(System.in);
        try {
            send = new OutputStreamWriter(client.getOutputStream());
            writer = new PrintWriter(send,true);
            while (!client.isClosed()) {
                msgstr = sin.nextLine();
                writer.println(sendstr+client.getInetAddress()+":"+msgstr);
            }
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }
}

服务器
TestServer.java

package lhy.socket.server;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class TestServer {

    private static ServerSocket server;
    private static final int TCP_PORT = 3002;
    /**
     * @param args
     */
    public static void main(String[] args) 
    {
        System.out.println("server->致:hello world! 最伟大的程序!");
        try {
            //1.设置服务器
            server = new ServerSocket(TCP_PORT);
            System.out.println("服务器已经启动!");
            while (true) {
                //2.监听客户端,这里只实现了与一个客户端的通信
                //【如果要和多个客户端进行通信,将连接的客户端通过监
                //听将客户端保存到集合内,发送只开一个线程就够了,重
                //写我send方法,比如实现发送时历遍集合发送;而服务器
                //接收信息时就需要为每一次监听到的客户端开一个线程】
                Socket client =server.accept();

                //3.开接收线程
                Recv readthread = new Recv(client);
                new Thread(readthread,"Server-Read-Thread").start();
                Send sendthread = new Send(client,"Server");
                new Thread(sendthread,"Server-Send-Thread").start();
            } 
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }
}

客户端

package lhy.socket.server;

import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class TestClient {
    private static Socket clienSocket;
    private final static String TCP_IP   ="127.0.0.1"; 
    private final static int    TCP_PORT = 3002;
    /**
     * @param args
     */
    public static void main(String[] args) {
        System.out.println("client->致:hello world! 最伟大的程序!");
        try {
            clienSocket = new Socket(TCP_IP, TCP_PORT);
            Recv readthread = new Recv(clienSocket);
            new Thread(readthread,"接收").start();
            Send sendthread = new Send(clienSocket,"Client");
            new Thread(sendthread,"发送").start();
        } catch (UnknownHostException e) {
            System.out.println(e.getMessage());
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }
}

客户端
服务器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值