socket通信

选择端口的时候必须小心.每一个端口提供一种特定的服务.0~1023的端口为系统保留,所以选择端口时最好大于1023,防止冲突.

创建服务器步骤:

1.        指定端口实例化一个ServerSocket

2.        调用ServerSocket的accept()以在等待连接期间造成阻塞

3.        获取位于该底层socket的流以进行读写操作

4.        将数据封装成流

5.        对socket进行读写

6.        关闭打开的流

先关闭Reader在关闭Writer

服务器:
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;

/**
 * @version 2012-7-26 下午04:04:18
 **/
public class servce implements Runnable {

    public void run() {
        try {
            // 创建ServerSocket
            ServerSocket serverSocket = new ServerSocket(54321);
            while(true) {
                // 接受客户端请求
                Socket client = serverSocket.accept();
                System.out.println("accept");
                try {
                    // 接受客户端消息
                    BufferedReader in = new BufferedReader(
                            new InputStreamReader(client.getInputStream()));
                    String str = in.readLine();
                    System.out.println("read:" + str);
                    PrintWriter out = new PrintWriter(new BufferedWriter(
                            new OutputStreamWriter(client.getOutputStream())),
                            true);
                    out.println("server message");
                    // 关闭流
                    in.close();
                    out.close();
                }
                catch(Exception e) {
                    System.out.println(e.getMessage());
                }
                finally {
                    client.close();
                    System.out.println("close");
                }
            }
        }
        catch(Exception e) {
            System.out.println(e.getMessage());
        }
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        Thread d = new Thread(new servce());
        d.start();
    }
}

使用socket实现客户端的步骤

1.        通过IP地址和端口实例化Socket,请求连接服务器

2.        获取Socket上的流以进行读写

3.        把流包装进BufferedReader/PrintWriter实例

4.        对Socket进行读写

5.        关闭打开的流使用iterSocket

客户端:


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

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class mainActivity extends Activity {
    EditText et;
    Button btn;
    TextView tv;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        et = (EditText) findViewById(R.id.et1);
        btn = (Button) findViewById(R.id.btn1);
        tv = (TextView) findViewById(R.id.tv1);
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Socket socket = null;
                String message = et.getText().toString() + "\r\n";
                try {
                    // 创建socket
                    socket = new Socket("10.0.2.2", 54321);
                    // 向服务器发送消息
                    PrintWriter out = new PrintWriter(new BufferedWriter(
                            new OutputStreamWriter(socket.getOutputStream())),
                            true);
                    out.println(message);

                    // 接受来自服务器的消息
                    BufferedReader br = new BufferedReader(
                            new InputStreamReader(socket.getInputStream()));
                    String msg = br.readLine();
                    if(msg != null) {
                        tv.setText(msg);
                    }
                    else {
                        tv.setText("数据错误");
                    }
                    // 关闭流
                    out.close();
                    br.close();
                    socket.close();
                }
                catch(Exception e) {
                    // TODO: handle exception
                }
            }
        });
    }
}
这是一个服务器和客户端单独通信
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值