java TCP 通信涉及类和执行过程
来源:互联网 发布:手机淘宝 买家中心 编辑:程序博客网 时间:2024/05/18 08:55
执行过程:
1,首先TCP服务程序创建ServerSocket类实例
执行accept方法,等待客户端发出请求
2,客户端创建Socket实例,发送连接请求。
3,服务器端接收到请求后,创建一个新的Socket建立与客户端的专线连接
4,通过这条专线即单独的线程上,与客户端对话。
5,服务器端开始等待新的客户端请求。重复2-5的步骤
编写TCP通信涉及类:
服务器端:
ServerSocket()
不能直接使用。需要bind方法才可用。
ServerSocket(int port)//指定端口号。如果0,系统自动分配。
backlog默认10。一般用此方法
ServerSocket(int port,int backlog)
backlog 服务器很忙时,可以保持连接用户的数量。
ServerSocket(int port,int backlog,InetAddress bindAddr)
//bindAddr适用于多网卡,多IP时
accept用于等待客户端的请求。
客户端:
Socket()对象需要调用Connect();才可以。
其他函数类似ServerSocket();
Acpet返回服务器端的socket对象。
用getInputStream和getOutputStream进行交互。
TCP通信以网络字节流的方式交换数据。
getInputStream用于返回输入流对象。
getOutputStream用户返回输出流对象
只要客户端和服务器建立了专线连接之后,一端向输出流写入了数据。另一端就可以在输入流中读取
TCP服务器模型编写要点:
1,需接收多个客户端连接时,要循环调用ServerSocket.accept方法
2,服务器程序和每个客户端连接的会话过程不能相互影响,需要在独立的线程中运行。
3,一个线程服务对象与一个服务器端Socket对象相关联,共同来完成于一个客户端的会话。
DEMO:
import java.net.*;
//服务器端接收程序
class ReverseServer
{
public static void main(String[] args)
{
ServerSocket ss=null;
try{
if(args.length<1)
ss=new ServerSocket(8001);
else
ss=new ServerSocket(Integer.parseInt(args[0]));
while(true){//接收多个客户端连接
Socket s=ss.accept();//等待客户端请求
new Thread(new Servicer(s)).start();//启动一个线程维护对话
}
}catch(Exception e){
e.printStackTrace();
}
}
}
import java.net.*;
import java.io.*;
//处理程序
class Servicer implements Runnable
{
private Socket s=null;
public Servicer(Socket s){
this.s=s;
}
public void run(){
try{
InputStream ips=s.getInputStream();//获取客户端字节流
OutputStream ops=s.getOutputStream();
BufferedReader br=new BufferedReader(
new InputStreamReader(ips)
);//字节流转字符流
PrintWriter pw=new PrintWriter(ops,true);//创建输出字符流
while(true){
String strLine=br.readLine();//读取字符
if(strLine.equalsIgnoreCase("quit")) break;
String strEcho=(new StringBuffer(strLine).reverse()).toString();//反向排列
pw.println(strLine+"-->"+strEcho);//换行符根据操作系统调整。
}
br.close();
pw.close();
s.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
//客户端程序
import java.io.*;
import java.net.*;
class TcpClient
{
public static void main(String[] args)
{
try{
if(args.length<2){
System.out.println("Use:IPAddress,port");
return;
}
Socket s=new Socket(args[0],Integer.parseInt(args[1]));
InputStream ips=s.getInputStream();
OutputStream ops=s.getOutputStream();
BufferedReader brNet=new BufferedReader(
new InputStreamReader(ips));
PrintWriter pw=new PrintWriter(ops,true);
BufferedReader brKeyBoard=new BufferedReader(
new InputStreamReader(System.in));
while(true){
String strWord=brKeyBoard.readLine();
pw.println(strWord);
if(strWord.equalsIgnoreCase("quit"))break;
System.out.println(brNet.readLine());
}
pw.close();
brNet.close();
brKeyBoard.close();
s.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
检测端口冲突问题:
netstat -na
- java TCP 通信涉及类和执行过程
- Python UDP和TCP的通信过程
- Java Socket(套接字)编程、TCP和UDP通信过程详解
- TCP通信过程
- TCP通信过程小结
- TCP通信过程(一)
- 【Java】类执行过程
- Java通信:Socket和TCP编程
- JAVA学习之基于TCP的通信过程
- java平台上异构系统通信和分布式架构经常涉及的技术
- java实现的生产者和消费者问题-涉及线程同步与通信
- tcpdump 分析 TCP 通信过程
- linux TCP网络通信过程
- TCP通信过程大讨论
- http通信和tcp通信
- java---TCP通信 总结
- Java tcp socket 通信
- JAVA TCP通信
- 异步IO完整例子-可改写用于服务器
- http://jqueryhtml5.webege.com——个人收集不错JQuery插件的网站
- 【转】SQL server中convert函数大全(SQL日期时间转为字符串)
- 读取Properties的六种方式
- 使用ifstream和getline读取文件内容[c++]
- java TCP 通信涉及类和执行过程
- 图解DotNet框架之十:WCF(Remoting,Webservice)
- linux c/c++基础笔记
- 蛇形数组打印
- 链接过程分析
- Opengl -- 五角星的绘制
- fedora 14 安装 unrar
- 重绘窗口的消息
- align的AbsBottom 、AbsMiddle 、Baseline 、Bottom 、Left 、Middle