博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
socket通信
阅读量:6893 次
发布时间:2019-06-27

本文共 4168 字,大约阅读时间需要 13 分钟。

hot3.png

选择端口的时候必须小心.每一个端口提供一种特定的服务.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                }            }        });    }}
这是一个服务器和客户端单独通信

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://my.oschina.net/u/2406628/blog/473407

你可能感兴趣的文章
leetcode20: Insert Interval
查看>>
GNU make: Learning notes
查看>>
泛型程序设计---泛型方法的定义
查看>>
一个“MacBook”新手的Python“笨办法”自学之旅 #第九章:Python的函数
查看>>
codetest
查看>>
自己实现文本相似度算法(余弦定理)
查看>>
卡尔曼滤波小结
查看>>
Windows Server 2008 R2 负载平衡入门篇
查看>>
前后端联调
查看>>
OpenCV与QT联合编译 分类: Eye_Detection ...
查看>>
LNMP架构介绍
查看>>
洛谷3986
查看>>
ssh服务
查看>>
Eclipse的基本使用
查看>>
构建之法 第五章 团队和流程
查看>>
(转)如何在eclipse的配置文件里指定jdk路径
查看>>
如何将atom侧边栏显示在右侧
查看>>
Block介绍(一)基础
查看>>
COLORREF的结构和用法
查看>>
《c程序设计语言》读书笔记--统计换行数,空格数,tab数
查看>>