读书人

赵雅智_java 网络编程(二)之TCP

发布时间: 2012-09-16 17:33:16 作者: rapoo

赵雅智_java 网络编程(2)之TCP

TCP:客户端服务端

服务端:

ServerSocket:编写TCP网络服务程序,首先要用到java.net.ServerSocket类用以创建服务器Socket

构造方法:

ServerSocket(int port):创建绑定到特定端口的服务器套接字ServerSocket(int port, int backlog):利用指定的backlog(服务器忙时保持连接请求的等待客户数量),创建服务器套接字并将其绑定到指定的本地端口号。ServerSocket(int port, int backlog, InetAddress bindAddr):使用指定的端口、侦听 backlog 和要绑定到的本地 IP 地址创建服务器。

常用方法:

Socket accept():侦听并接受到此套接字的连接。boolean isBound():返回 ServerSocket 的绑定状态。InetAddress getInetAddress():返回此服务器套接字的本地地址。boolean isClosed():返回 ServerSocket 的关闭状态。void close():关闭此套接字。void bind(SocketAddress endpoint):将ServerSocket 绑定到特定地址(IP 地址和端口号)。

客户端:

Socket:客户端要与服务器建立连接,必须先创建一个Socket对象

常用构造方法

Socket(String host, int port):创建一个流套接字并将其连接到指定主机上的指定端口号。Socket(InetAddress address, int port):创建一个流套接字并将其连接到指定 IP 地址的指定端口号。

常用方法

InetAddress getInetAddress():返回套接字连接的地址。int getPort():返回此套接字连接到的远程端口。InetAddress getlocalAddress():获取套接字绑定的本地地址。int getLocalPort():返回此套接字绑定到的本地void close():返回此套接字的输入流。InputStream getInputStream():返回此套接字的输入流。OutputStream getOutputStream():返回此套接字的输出流。

服务器端程序调用ServerSocket类中的accept()方法等待客户端的连接请求,一旦accept()接收了客户端连接请求,该方法返回一个与该客户端建立了专线连接的Socket对象,不用程序去创建这个Socket对象。建立了连接的两个Socket是以IO流的方式进行数据交换的,Java提供了Socket类中的getInputStream()返回Socket的输入流对象,getOutputStream()返回Socket的输出流对象。

先开服务端(service)在开客户端(client)

否则会出现错误,如下:

赵雅智_java 网络编程(二)之TCP

实例1:客户端与服务端

客户端:

package src.com.hbsi.net;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;public class TcpClient {/** * @param args */public static void main(String[] args) throws Exception{//1.建立tcp客户端socket,要确定要连接的服务器ip,portSocket s=new Socket("192.168.49.59",9009);//2.通过建立的socket,获取输出流对象OutputStream out=s.getOutputStream();out.write("wo lai le".getBytes());//读取服务器端发过来的信息InputStream in=s.getInputStream();byte[] buf=new byte[1024];int len=in.read(buf);System.out.println(new String(buf,0,len));s.close();}}


服务端

package src.com.hbsi.net;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;public class TcpServer {/** * @param args */public static void main(String[] args)throws Exception {//1.建立服务器socketServerSocket ss=new ServerSocket(9009);//2.调用accept()Socket s=ss.accept();String ip=s.getInetAddress().getHostAddress();System.out.println(ip+"...connection");InputStream in=s.getInputStream();byte[] buf=new byte[1024];int len=in.read(buf);System.out.println(new String(buf,0,len));//服务端向客户端返回信息OutputStream out=s.getOutputStream();out.write("wo shou dao le".getBytes());s.close();ss.close();}}

用CMD命令窗口打开:

赵雅智_java 网络编程(二)之TCP

实例2:可以从键盘录入的客户端和服务端

客户端:

package src.com.hbsi.net;import java.net.Socket;import java.io.*;public class TcpClient2 {/** * @param args */public static void main(String[] args) throws Exception{Socket s=new Socket("192.168.49.59",9009);//获取键盘录入BufferedReader br=new BufferedReader(new InputStreamReader(System.in));//数据输出给服务器端OutputStream out=s.getOutputStream();BufferedWriter bwout=new BufferedWriter(new OutputStreamWriter(out));//获取服务器端返回的数据BufferedReader brin=new BufferedReader(new InputStreamReader(s.getInputStream()));String line=null;while((line=br.readLine())!=null){if(line.equals("over"))break;bwout.write(line);bwout.newLine();bwout.flush();String str=brin.readLine();System.out.println("server:"+str);}br.close();s.close();}}


服务端:

/*客户端通过键盘录入信息,发送到服务器端服务器端收到信息后,将信息转为大写返回给客户端。*/package src.com.hbsi.net;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.ServerSocket;import java.net.Socket;public class TcpServer2 {/** * @param args */public static void main(String[] args) throws Exception{ServerSocket ss=new ServerSocket(9009);Socket s=ss.accept();System.out.println(s.getInetAddress().getHostAddress()+"...connection");//读取客户的信息的输入流InputStream in=s.getInputStream();BufferedReader brin=new BufferedReader(new InputStreamReader(in));//向客户端发送信息输出流BufferedWriter brout=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line=null;while((line=brin.readLine())!=null){System.out.println("client:"+line);brout.write(line.toUpperCase());brout.newLine();brout.flush();}s.close();ss.close();}}


赵雅智_java 网络编程(二)之TCP

读书人网 >编程

热点推荐