网络Socket入门编程

来源:互联网 发布:matlab数组分号 编辑:程序博客网 时间:2024/06/05 10:28

连接、传送与接收

要让客户端能够工作,有三件事必须学:

  • 如何建立客户端与服务器之间的初始连接
  • 如何传送消息到服务器
  • 如何接收来自服务器的消息
Created with Raphaël 2.1.0客服端Client客服端Client服务器Server服务器Server1.连接服务器连接127.0.0.1的5000这个端口号2.传送消息writes.println(message)3.服务器接收消息String s=reader.readerLine()

一.建立连接

要连接到其他的机器上,我们会需要Socket的连接. Socket是个代表两台机器之间网络连接的对象(java.net .Socket ) 。什么是连接?两台机器之间的一种关系。让两个软件相互认识对对方。最重要的是同者知道如何与对方通信,也就是说知道如何发送数据给对方。
这里写图片描述
TCP端口只是一个16位宽、用来识别服务器上特定程序的数字。IP地址就好像是门口的号牌,IP地址可以指特定的地方,端口号则是该地址不同的窗口,比如25号窗口处理邮件,80端口处理网页

二.使用BufferedReader从Socket读取数据

1.建立对服务器的Socket连接
Socket so = new Socket(“服务器ip地址”,”端口号”);
2.建立连接到Socket上低层次输入串流的InputStreamReader InputStreamReader stream = new InputStreamReader(so.getInputStream());//从Socket中取得输入串流
3.建立BufferedReader来读取
BufferedReader reader = new BufferedReader(stream);
String message = reader.readLine();
读取数据
三.用PrintWriter写数据到Socket上

1.对服务器建立Socket连接
Socket so = new Socket(“服务器ip地址”,”端口号”);
2.建立链接到Socket的PrintWriter
PrintWriter writer = new PrintWriter(so.getOutputStream());
3.写入数据
writer.println(“message1”);
writer.print(“message2”);
传送数据

四.编写简单的客户端程序

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.Socket;import java.net.UnknownHostException;public class AdviceClient {    public void go() {        try {            Socket so = new Socket("127.0.0.1", 4242);            InputStreamReader stream = new InputStreamReader(                    so.getInputStream());            BufferedReader reader = new BufferedReader(stream);// 链接数据串流            String advice = reader.readLine();            System.out.println("今天你应该:" + advice);            reader.close();        } catch (UnknownHostException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    public static void main(String[] args) {        AdviceClient client = new AdviceClient();        client.go();    }}

这是一个读取本机端口号为4242的客户端程序

五.编写简单的服务器程序

服务器工作方式:
1. 服务器应用程序对特定端口创建出ServerSocket。
ServerSocket ss = new ServerSocket(4242);
这会让服务器应用程序开始监听来自4242端口的客户端请求。
2. 客户端对服务器应用程序建立Socket连接。
Socket so = new Socket(“127.0.0.1”,4242);
客户端得知道IP地址与端口号
3. 服务器创建出与客户端通信的新Socket.
Socket so=ss.accept();
accept()方法会在等待用户的Socket连接时闲置着。当用户连上来时,此方法会返回一个Socket以便与客户端通信。Socket与ServerSocket的端口不相同,因此ServerSocket可以空出来等待其他的用户。

import java.io.IOException;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class AdviceServer {    String[] adviceList = { "好好学习,天天向上", "天道酬勤", "失败是成功之母", "珍惜现在,赢得未来" };    public void go() {        try {            // ServerSocket会监听客户端对这台机器在4242端口上的要求            ServerSocket ss = new ServerSocket(4242);            // 服务器进入无穷循环等待客户端的请求            while (true) {                // 客服端请求到达                Socket so = ss.accept();                PrintWriter writer = new PrintWriter(so.getOutputStream());                String advice = getAdvice();                writer.println(advice);                writer.close();                System.out.println(advice);            }        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    private String getAdvice() {        int random = (int) (Math.random() * adviceList.length);        return adviceList[random];    }    public static void main(String[] args) {        AdviceServer server = new AdviceServer();        server.go();    }}

聪明的读者不难发现,以上的简单服务器应用程序是不能够处理多个用户请求。这不是很难,使用不同的线程并让新的客户端取得新的线程就好。

3 0