java编写TCP方式的通信程序
2008-05-01 06:02
459 查看
java API中封装了大量的函数,供编写网络通信程序时使用.
这使得java在网络方面具有强大的功能.
用java编写TCP方式的通信程序比较简单,但也有一些问题需要注意.
以下为监听主程序,监听程序在发现客户端连接后,启动一个会话socket线程,以实现实时发送,接收信息
和多客户端同时工作.
import java.io.*;
import java.lang.*;
import java.net.ServerSocket;
import java.net.Socket;
//主程序一直处于监听状态,有连接则启动一个线程进行处理,以实现多个客户端
public class listenserve
{
private ServerSocket ss;
private boolean listening=true;
public listenserve()
{
Init();//初始化
lisn();//启动监听
}
public void Init()
{
try
{
ss=new ServerSocket(10015,10);
}
catch(IOException ie)
{
System.out.println("无法在10015端口监听");
ie.printStackTrace();
}
}
public void lisn()
{
try
{
while(listening)
new Thread(new dialogserve(ss.accept())).start();
}
catch(IOException ie)
{ie.printStackTrace();}
}
public static void main(String args[])
{
new listenserve();
}
}
//以下为会话主程序
应该特别注意,如果客户端先关闭,会话socket中可能抛出socketexception:connection reset
这应该在程序中进行处理,这也是较易忽略的问题.
import java.io.*;
import java.lang.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
public class dialogserve implements Runnable
{
private Socket s;
private InputStream in;
private String rev,temp;
private byte b[];
private int len;
public dialogserve(Socket ss)
{
s=ss;
b=new byte[1024];
try
{
in=s.getInputStream();
}catch(IOException ie)
{
ie.printStackTrace();
}
rev="";
}
public void run()
{
try
{
while(s.isConnected()==true)
{
if((len=in.read(b))!=-1)
{
temp=new String(b,0,len);
rev+=temp;
System.out.print(rev);
temp=null;
Thread.sleep(1000);
}
}
in.close();
s.close();
System.out.println("会话socket已断开!");
}
catch(SocketException se)
{
System.out.println("客户端已断开!");
System.exit(0);
}
catch(IOException io)
{
io.printStackTrace();
System.exit(0);
}
catch(InterruptedException ire)
{ ire.printStackTrace();}
}
}
//以下为客户端主程序
import java.io.*;
import java.net.Socket;
import java.lang.*;
public class client
{
private Socket con;//客户端连接socket
private OutputStream out;
private String sen;
private byte b[];
public client()
{
clientInit();
}
public void clientInit()
{
try
{
con=new Socket("localhost",10015);
con.setSoTimeout(10000);
b=new byte[1024];
OutputStream out=con.getOutputStream();
sen="hello serve,以TCP方式发送数据!";
b=sen.getBytes();
out.write(b);
out.flush();
out.close();
con.close();
}
catch(IOException ie)
{
ie.toString();
}
}
public static void main(String args[])
{
new client();
}
}
总的来说,以上所列代码较为简单,但已基本反映出java编写简单TCP通信程序的原理.
希望各位朋友批评.大家共同学习交流.
这使得java在网络方面具有强大的功能.
用java编写TCP方式的通信程序比较简单,但也有一些问题需要注意.
以下为监听主程序,监听程序在发现客户端连接后,启动一个会话socket线程,以实现实时发送,接收信息
和多客户端同时工作.
import java.io.*;
import java.lang.*;
import java.net.ServerSocket;
import java.net.Socket;
//主程序一直处于监听状态,有连接则启动一个线程进行处理,以实现多个客户端
public class listenserve
{
private ServerSocket ss;
private boolean listening=true;
public listenserve()
{
Init();//初始化
lisn();//启动监听
}
public void Init()
{
try
{
ss=new ServerSocket(10015,10);
}
catch(IOException ie)
{
System.out.println("无法在10015端口监听");
ie.printStackTrace();
}
}
public void lisn()
{
try
{
while(listening)
new Thread(new dialogserve(ss.accept())).start();
}
catch(IOException ie)
{ie.printStackTrace();}
}
public static void main(String args[])
{
new listenserve();
}
}
//以下为会话主程序
应该特别注意,如果客户端先关闭,会话socket中可能抛出socketexception:connection reset
这应该在程序中进行处理,这也是较易忽略的问题.
import java.io.*;
import java.lang.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
public class dialogserve implements Runnable
{
private Socket s;
private InputStream in;
private String rev,temp;
private byte b[];
private int len;
public dialogserve(Socket ss)
{
s=ss;
b=new byte[1024];
try
{
in=s.getInputStream();
}catch(IOException ie)
{
ie.printStackTrace();
}
rev="";
}
public void run()
{
try
{
while(s.isConnected()==true)
{
if((len=in.read(b))!=-1)
{
temp=new String(b,0,len);
rev+=temp;
System.out.print(rev);
temp=null;
Thread.sleep(1000);
}
}
in.close();
s.close();
System.out.println("会话socket已断开!");
}
catch(SocketException se)
{
System.out.println("客户端已断开!");
System.exit(0);
}
catch(IOException io)
{
io.printStackTrace();
System.exit(0);
}
catch(InterruptedException ire)
{ ire.printStackTrace();}
}
}
//以下为客户端主程序
import java.io.*;
import java.net.Socket;
import java.lang.*;
public class client
{
private Socket con;//客户端连接socket
private OutputStream out;
private String sen;
private byte b[];
public client()
{
clientInit();
}
public void clientInit()
{
try
{
con=new Socket("localhost",10015);
con.setSoTimeout(10000);
b=new byte[1024];
OutputStream out=con.getOutputStream();
sen="hello serve,以TCP方式发送数据!";
b=sen.getBytes();
out.write(b);
out.flush();
out.close();
con.close();
}
catch(IOException ie)
{
ie.toString();
}
}
public static void main(String args[])
{
new client();
}
}
总的来说,以上所列代码较为简单,但已基本反映出java编写简单TCP通信程序的原理.
希望各位朋友批评.大家共同学习交流.
相关文章推荐
- java编写TCP&&UDP方式的通信程序
- java编写TCP方式的通信程序
- java编写TCP方式的通信程序
- Java编写一个简单的TCP通信程序。服务器发送一条字符串,客户端接收该信息并显示。
- JAVA系列课程讲座一:使用Socket通信实现网络通信程序(TCP方式)
- [编写高质量代码:改善java程序的151个建议]建议76 集合运算时使用更优雅的方式
- 使用JAVA编写网络通信程序
- 使用JAVA编写网络通信程序
- 利用java编写网络通信程序
- 使用JAVA编写网络通信程序
- C语言编写基于TCP和UDP协议的Socket通信程序示例
- 编写java程序推荐一个好的定义log的方式——lombok
- 银行前置机程序(通信部分socket,java编写 )
- 黑马程序员--java入门之TCP协议编写的通信程序
- JAVA——网络编程(2):Java编写的TCP网络程序
- 利用java编写网络通信程序
- 利用java编写网络通信程序
- 【java面试系列之网络编程】TCP和UDP的区别、TCP协议的三次握手和四次挥手、TCP协议的通信状态、网络编程时的同步、异步、阻塞、非阻塞、进程间的通信方式、TCP的流量控制和拥塞控制
- [分布式java]基于JavaAPI实现消息方式的系统间通信:TCP/IP+NIO
- 利用java编写网络通信程序