Java TCP入门例子
TCP套接字
Java为TCP协议提供了两个类:Socket类和ServerSocket类。一个Socket实例代表了TCP连接的一端。一个TCP连接是一条抽象的双向信道,两端分别由IP地址和端口号确定。
TCP客户端
典型的TCP客户端要经过下面三步:
1.创建一个Scoket实例:构造函数向指定的远程主机和端口建立一个TCP连接。
2.通过套接字的输入输出流(I/O
streams)进行通信:一个Scoket连接实例包括一个InputStream和一个OutputStream,它们的用法同于其他Java输入输出流。
3.使用Scoket类的close()方法关闭连接。
TCP服务器端
1.创建一个ServerSocket实例,并指定本地端口。此逃接字的功能是侦听该指定端口收到的连接。
2.重复执行:
a.调用ServerSocket的accept()方法以获取下一个客户端连接,基于新建立的客户端连接,创建一个Socket实例,并由accept()方法返回。
b.使用所返回的Socket实例的InputStream和OutputStream与客户端进行通信。
c.通信完成后,使用Socket类的Close()方法关闭该客户端套接字连接。
原理图:
下面程序示例:
TcpServer.java
package com.iboxpay.tcp;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer {
public static void main(String[] args) throws IOException {
BufferedReader buffer = null;
ServerSocket server= null;
Socket s = null;
InputStream is = null;
OutputStream os = null;
DataOutputStream dos = null;
try {
server = new ServerSocket(8080);
s = server.accept();
is = s.getInputStream();
os = s.getOutputStream();
System.out.println("-----------welcome to tcp socket-------");
buffer = new BufferedReader(new InputStreamReader(is));
dos = new DataOutputStream(os);
System.out.println(buffer.readLine());//输出
} catch (IOException e) {
e.printStackTrace();
}finally{
buffer.close();
os.close();
is.close();
s.close();
server.close();
}
}
}TcpClient.java
package com.iboxpay.tcp;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class TcpClient{
public static void main(String[] args) {
String[] str = {"172.30.5.58","8080"};
try {
client(str);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void client(String[] str) throws IOException{
Socket s = null;
InputStream ips = null;
OutputStream ops = null;
BufferedReader brKey = null;
DataOutputStream dos = null;
BufferedReader brNet = null;
try
{
//Socket s=new Socket(InetAddress.getByName("192.168.0.213"),8001);
if(str.length < 2)
{
System.out.println("Usage:java TcpClient ServerIP ServerPort");
return;
}
//建立Socket
s =new Socket(InetAddress.getByName(str[0]),Integer.parseInt(str[1]));
ips =s.getInputStream();
ops =s.getOutputStream();
dos = new DataOutputStream(ops);
brNet = new BufferedReader(new InputStreamReader(ips));
while(true)
{
brKey = new BufferedReader(new InputStreamReader(System.in));//键盘输入
String strWord = brKey.readLine();
dos.writeBytes(strWord + System.getProperty("line.separator"));
if(strWord.equalsIgnoreCase("quit"))
break;
}
}catch(Exception e){
e.printStackTrace();
} finally{
dos.close();
brNet.close();
brKey.close();
s.close();
}
}
}