黑马程序员 网络编程

来源:互联网 发布:string数组增加元素 编辑:程序博客网 时间:2024/05/16 15:51
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

Socket和ServerSocket
建立客户端和服务端
建立连接后,通过Socket中的IO流进行数据的传输。
关闭Socket
同样客户端和服务端是两个独立运行的程序。

TCP分为客户端和服务端
客户端对应的对象是Socket
服务端对应的对象是ServerSocket

客户端:Socket创建对象时就可以去链接指定主机。
因为TCP是面向连接的,所以在建立客户端时,就要有服务端存在,
并连接成功,形成通路后,通过IO流进行数据传输。

步骤:
1.创建Socket服务,并指定要链接的主机和端口。
2.获取socket流中的输出流,将数据写到该流中。
3.获取Socket流中的输入流,将服务端反馈的数据获取到,并打印。
4.关闭客户端

class Client 

    public static void main(String[] args)   throws Exception
    {  
                    //创建客户端的Socket服务,指定要连接服务端ip和端口
            Socket s = new Socket("192.168.1.100",10000); 
            //创建带缓冲技术的字符读取转换流去键盘关联  
            BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); 
            //创建带缓冲技术的字符读取转换流装饰Socket输入流  
            BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream())); 
            //创建带缓冲技术的字符输出转换流装饰Socket输出流  
            BufferedWriter bufout = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); 
             
            String line = null; 
            while ((line=bufr.readLine())!=null) 
            { 
                if("886".equals(line)) 
                    break;               
                bufout.write(line); 
                bufout.newLine(); 
                bufout.flush(); 
                System.out.println(bufin.readLine()); 
            } 
            s.close();  
        
   } 

import java.io.*;
import java.net.*;
class Client
{
 public static void main(String[] args)
 {
  try
  {
   //创建客户端的Socket服务,指定要连接服务端ip和端口
   //通路建立后就在客户端和服务端之间建立了一条Socket流
   //可以通过Socket的相应方法获取IO流
   Socket s = new Socket("192.168.1.100",10000);
   //创建带缓冲技术的字符读取转换流去键盘关联
   BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
   //创建带缓冲技术的字符读取转换流装饰Socket输入流
   BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream()));
   //创建带缓冲技术的字符输出转换流装饰Socket输出流
   BufferedWriter bufout = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
   
   String line = null;
   while ((line=bufr.readLine())!=null)
   {
    if("886".equals(line))
     break;    
    bufout.write(line);
    bufout.newLine();
    bufout.flush();
    System.out.println(bufin.readLine());
   }
   s.close();
  }
  catch (Exception e)
  {
   throw new RuntimeException("客服端异常");
  }
 }
}
服务端:
1.建立服务端:ServerSocket();并监听一个端口
2.通过服务端的accept方法,获取连接过来的客户端对象,没有连接有会等,这个方法是阻塞式的
3.客服端如果发过来数据,那么服务端要是用对应的客服端对象,获取该客户端的读取流读取发过来的数据。
4.关闭服务端(可选)一般服务端不需要关闭。
 


服务端:
1.建立服务端:ServerSocket();并监听一个端口
2.通过服务端的accept方法,获取连接过来的客户端对象,没有连接有会等,这个方法是阻塞式的
3.客服端如果发过来数据,那么服务端要是用对应的客服端对象,获取该客户端的读取流读取发过来的数据。
4.关闭服务端(可选)一般服务端不需要关闭。
class Server {
    public static void main(String[] args)   throws Exception
    {  
                    ServerSocket ss = new ServerSocket(10000); 
            Socket s = ss.accept(); 
 
 
            String ip = s.getInetAddress().getHostAddress(); 
            System.out.println(ip+"......connected"); 
             
             
            BufferedWriter bufout = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); 
             
            BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream())); 
            String line = null; 
         
            while ((line=bufin.readLine())!=null) 
            {    
                System.out.println(line); 
                bufout.write("服务器返回:"+line.toUpperCase()); 
                bufout.newLine(); 
                bufout.flush(); 
            } 
            s.close();    
    } 

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
原创粉丝点击