socket通信

 

socket通信

一、创建服务器的步骤

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

           ServerSocket severSocket = new ServerSocket(54321);

      2、调用ServerSocket的accept()开始监听客户端的连接,并取得客户端的Socket对象client

           Socket client = severSocket.accept();

      3、获取位于底层Socket的流,以进行读写操作

           //接受客户端的消息
            InputStream is = client.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader in = new BufferedReader(isr);     
            String str =  in.readLine();  

        //向客户端发送消息
            OutputStream os = client.getOutputStream();
            OutputStreamWriter osr = new OutputStreamWriter(os);
            BufferedWriter bw = new BufferedWriter(osr);
            PrintWriter out = new PrintWriter(bw,true);
            out.println("server message");
         

         4、关闭打开的流(注意:先关闭Writer,后关闭Reader)

           in.close();
           out.close();

 

二、创建客户端的步骤

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

           socket = new Socket("ipdizhi",54321);

      2、获取Socket上的流进行读写操作,把流包装进BufferedReader/PrintWriter的实例;并对socket进行读写

      3、关闭流 

 以下附代码实例

Client
复制代码
 1 public class Client extends Activity{
 2     private TextView mTextView = null;
 3     private EditText mEditText = null;
 4     private Button mButton = null;
 5     
 6     @Override
 7     public void onCreate(Bundle savedInstanceState) {
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.socket);
10         
11         mTextView = (TextView)findViewById(R.id.textView1);  
12         mEditText = (EditText)findViewById(R.id.editText1);  
13         mButton = (Button)findViewById(R.id.button1);  
14         
15         mButton.setOnClickListener(new OnClickListener() {
16             
17             @Override
18             public void onClick(View v) {
19                 Socket socket = null;
20                 String str = mEditText.getText().toString();
21                 try{
22                     socket = new Socket("ipdizhi",54321);
23                     //向服务器发送消息
24                     OutputStream os = socket.getOutputStream();
25                     OutputStreamWriter osr = new OutputStreamWriter(os);
26                     BufferedWriter bw = new BufferedWriter(osr);
27                     PrintWriter out = new PrintWriter(bw,true);
28                     out.println(str);
29                     
30                     //接收来自服务器的消息
31                     InputStream is = socket.getInputStream();
32                     InputStreamReader isr = new InputStreamReader(is);
33                     BufferedReader br = new BufferedReader(isr);
34                     String msg = br.readLine();
35                     if(msg!=null){
36                         mTextView.setText(msg);
37                     }else
38                         mTextView.setText("数据错误");
39                     
40                     out.close();
41                     br.close();
42                     socket.close();                                                        
43                 }catch(Exception e){
44                     Log.e("socket",e.getMessage()+"close");
45                     e.printStackTrace();
46                 }
47                 
48             }
49         }); 
50     }
51 
52 }
复制代码
Server
复制代码
 1 public  class Server implements Runnable{
 2 
 3     @Override
 4     public void run() {
 5         try{
 6             ServerSocket severSocket = new ServerSocket(54321);
 7             while(true){
 8                 //接收客户端请求
 9                 Socket client = severSocket.accept();
10                 try{
11                     //接受客户端消息
12                     InputStream is = client.getInputStream();
13                     InputStreamReader isr = new InputStreamReader(is);
14                     BufferedReader in = new BufferedReader(isr);
15                     
16                     String str = null;                    
17                     while((str=in.readLine())!=null){
18                         str = str+"\n";
19                     }
20                     System.out.println("read:"+str);
21                     
22                     //向客户端发送消息
23                     OutputStream os = client.getOutputStream();
24                     OutputStreamWriter osr = new OutputStreamWriter(os);
25                     BufferedWriter bw = new BufferedWriter(osr);
26                     PrintWriter out = new PrintWriter(bw,true);
27                     out.println("server message");
28                     
29                     //关闭流
30                     in.close();
31                     out.close();    
32                 }catch(Exception e){
33                     Log.e("111",e.getMessage()+"close");
34                     e.printStackTrace();
35                 }
36                 finally{
37                     client.close();
38                     Log.e("finally","close");
39                 }
40             }
41         }catch(Exception e){
42             Log.e("222",e.getMessage()+"close");
43         }
44     }
45 //main函数,开启服务器
46     public static void main(String []a){
47         Thread deskTopServerThread = new Thread(new Server());
48         deskTopServerThread.start();                
49     }
50 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值