java聊天程序入门级开发.docx
《java聊天程序入门级开发.docx》由会员分享,可在线阅读,更多相关《java聊天程序入门级开发.docx(37页珍藏版)》请在冰豆网上搜索。
java聊天程序入门级开发
/*
try{.....}中定义的局部变量只能在try{......}中使用,不能在其他地方使用
*/
publicclassTest
{
publicstaticvoidmain(String[]args)
{
try
{
inti=10;
System.out.println("i="+i);
}
catch(Exceptione)
{
//System.out.println("i="+i);//error因为在try{.....}中定义的局部变量只能在try{....}中使用,try{.....}中定义的局部变量不能在catch(..){.....}和finally{.....}中使用
}
finally
{
//System.out.println("i="+i);//error原因同上
}
//System.out.println("i="+i);//总结:
try{.....}中定义的局部变量只能在try{......}中使用,不能在其他地方使用
}
}
/*
错误的程序
*/
importjava.io.*;
import.*;
publicclassTServer
{
publicstaticvoidmain(String[]args)
{
ServerSocketss=null;
Sockets=null;
DataInputStreamdis=null;
try
{
ss=newServerSocket(8888);
while(true)
{
s=ss.accept();
dis=newDataInputStream(s.getInputStream());
Stringstr=dis.readUTF();
System.out.println("对方说的是:
"+str);
}
dis.close();//这样写就错了,因为本语句永远无法得到执行
s.close();//同上
ss.close();//同上
}
catch(SocketExceptione)
{
System.out.println("网络连接出错,程序终止");
System.exit(-1);
}
catch(IOExceptione)
{
System.out.println("读写数据出错,程序终止");
System.exit(-1);
}
}
}
/*
错误的程序
*/
importjava.io.*;
import.*;
publicclassTServer_2
{
publicstaticvoidmain(String[]args)
{
try
{
ServerSocketss=newServerSocket(8888);
Sockets=null;
DataInputStreamdis=null;
while(true)
{
s=ss.accept();
dis=newDataInputStream(s.getInputStream());
Stringstr=dis.readUTF();
System.out.println("对方说的是:
"+str);
}
}
catch(SocketExceptione)
{
System.out.println("网络连接出错,程序终止");
System.exit(-1);
}
catch(IOExceptione)
{
System.out.println("读写数据出错,程序终止");
System.exit(-1);
}
finally
{
try
{
dos.close();//error找到不到dos
s.close();//error同上
ss.close();//error同上
}
catch(Exceptione)
{
}
}
}
}
/*
错误的程序
*/
importjava.io.*;
import.*;
publicclassTServer_3
{
publicstaticvoidmain(String[]args)
{
ServerSocketss;//会导致40行出错
Sockets;//会导致41行出错
DataInputStreamdis;//会导致42行出错
try
{
ss=newServerSocket(8888);
s=null;
dis=null;
while(true)
{
s=ss.accept();
dis=newDataInputStream(s.getInputStream());
Stringstr=dis.readUTF();
System.out.println("对方说的是:
"+str);
}
}
catch(SocketExceptione)
{
System.out.println("网络连接出错,程序终止");
System.exit(-1);
}
catch(IOExceptione)
{
System.out.println("读写数据出错,程序终止");
System.exit(-1);
}
finally
{
try
{
dis.close();//40行error编译器认为dis可能还没有被初始化
s.close();//41行error同上
ss.close();//42行error同上
}
catch(Exceptione)
{
}
}
}
}
/*
正确的程序
*/
importjava.io.*;
import.*;
publicclassTServer_4
{
publicstaticvoidmain(String[]args)
{
ServerSocketss=null;
Sockets=null;
DataInputStreamdis=null;
try
{
ss=newServerSocket(8888);
s=null;
dis=null;
while(true)
{
s=ss.accept();
dis=newDataInputStream(s.getInputStream());
Stringstr=dis.readUTF();
System.out.println("对方说的是:
"+str);
}
}
catch(SocketExceptione)
{
System.out.println("网络连接出错,程序终止");
System.exit(-1);
}
catch(IOExceptione)
{
System.out.println("读写数据出错,程序终止");
System.exit(-1);
}
finally
{
try
{
dis.close();
s.close();
ss.close();
}
catch(Exceptione)
{
}
}
}
}
/**
*2009年3月27日10:
36:
30
*有关Java虚拟机异常处理机制的问题
*
**/
classA
{
publicvoidf()
{
System.out.println("AAAA");
}
}
publicclassTest
{
publicstaticvoidmain(String[]args)
{
Aaa1=null;//aa1必须的被赋值,否则会导致21行出错,因为编译器认为16行并一定会成功给aa1赋值,
//不过令人遗憾的是:
编译器在编译时却检测不出空指针异常错误,以本程序为例,因为16行并不一定可以成功给aa1赋值,所以理论上讲21行的aa1仍然可能是null,但是令人遗憾的是编译器编译时却检测不出这种错误,它只会在运行时抛出java.lang.NullPointerException异常
try
{
aa1=newA();//16行
}
catch(Exceptione)
{
}
//aa1=newA();
aa1.f();//21行编译器在编译时检测不出空指针异常错误,以本程序为例,因为16行并不一定可以成功给aa1赋值,所以理论上讲本行中的aa1仍然可能是null,但是令人遗憾的是编译器编译时却检测不出这种错误,它只会在运行时抛出java.lang.NullPointerException异常
///*
//*下面两行代码验证了:
//编译器在编译时检测不出空指针异常错误,它只会在运行时抛出
//java.lang.NullPointerException异常
//*/
//Aaa2=null;
//aa2.f();//编译器编译时检测不会出错,只会在运行时抛出java.lang.NullPointerException异常
}
}
importjava.io.*;
import.*;
publicclassTServer
{
publicstaticvoidmain(String[]args)
{
ServerSocketss=null;//这里的ss必须得初始化,哪怕初始化为null也可以,否则会导致39行报错,因为编译器认为14行并不一定会给ss赋值成功,不过很可笑的是Java编译器认为try{......}中代码执行并不一定成功,所以要求你在try之前必须得对变量赋初值,但是编译器却检测不出赋初值为null的错误,以本程序为例,这里将ss赋为null,按照逻辑,try{....}中代码并不一定能给ss赋正确的值,那最终结果ss仍可能是null,所以理论上讲:
39行代码仍然可能是错的,不过JAva编译器却检测不出这种错误,我估计是因为Aaa=null;aa.成员名;这种方式编译器编译时是检测不出这种错误的,只会跑出NullPointerException异常
Sockets=null;
DataInputStreamdis=null;
try
{
ss=newServerSocket(8888);//14行
while(true)
{
s=ss.accept();
dis=newDataInputStream(s.getInputStream());
Stringstr=dis.readUTF();
System.out.println("对方说的是:
"+str);
}
}
catch(SocketExceptione)
{
System.out.println("网络连接出错,程序终止");
System.exit(-1);
}
catch(IOExceptione)
{
System.out.println("读写数据出错,程序终止");
System.exit(-1);
}
finally
{
try
{
dis.close();
s.close();
ss.close();//39行
}
catch(Exceptione)
{
}
}
}
}
一个发一个接
importjava.io.*;
import.*;
publicclassTClient
{
publicstaticvoidmain(String[]args)
{
Sockets=null;
DataOutputStreamdos=null;
try
{
s=newSocket("127.0.0.1",8888);
dos=newDataOutputStream(s.getOutputStream());
//dos.writeUTF("哈哈");
dos.writeUTF("嘿嘿");
}
catch(SocketExceptione)
{
System.out.println("网络连接出错,程序终止");
System.exit(-1);
}
catch(IOExceptione)
{
System.out.println("读写数据出错,程序终止");
System.exit(-1);
}
finally
{
try
{
dos.close();
s.close();
}
catch(Exceptione)
{
}
}
}
}
importjava.io.*;
import.*;
publicclassTServer
{
publicstaticvoidmain(String[]args)
{
ServerSocketss=null;
Sockets=null;
DataInputStreamdis=null;
try
{
ss=newServerSocket(8888);
while(true)
{
s=ss.accept();
dis=newDataInputStream(s.getInputStream());
Stringstr=dis.readUTF();
System.out.println("对方说的是:
"+str);
}
}
catch(SocketExceptione)
{
System.out.println("网络连接出错,程序终止");
System.exit(-1);
}
catch(IOExceptione)
{
System.out.println("读写数据出错,程序终止");
System.exit(-1);
}
finally
{
try
{
dis.close();//error找到不到dos
s.close();//error同上
ss.close();//error同上
}
catch(Exceptione)
{
}
}
}
}
每人能且只能说一句
importjava.io.*;
import.*;
publicclassTClient
{
publicstaticvoidmain(String[]args)throwsException
{
Sockets=null;
DataInputStreamdis=null;
DataOutputStreamdos=null;
BufferedReaderbr=null;
try
{
s=newSocket("127.0.0.1",8888);
dis=newDataInputStream(s.getInputStream());
dos=newDataOutputStream(s.getOutputStream());
br=newBufferedReader(newInputStreamReader(System.in));
while(true)
{
Stringstr=br.readLine();
dos.writeUTF(str);
if(str.equalsIgnoreCase("再见"))
break;
str=dis.readUTF();
System.out.println("对方说的是:
"+str);
if(str.equalsIgnoreCase("再见"))
break;
}
}
catch(SocketExceptione)
{
System.out.println("网络连接出错,程序终止");
}
catch(IOExceptione)
{
System.out.println("读写数据出错,程序终止");
}
catch(Exceptione)
{
}
finally
{
try
{
dis.close();
dos.close();
s.close();
}
catch(Exceptione)
{
}
}
}
}
importjava.io.*;
import.*;
publicclassTServer
{
publicstaticvoidmain(String[]args)
{
ServerSocketss=null;
Sockets=null;
DataInputStreamdis=null;
DataOutputStreamdos=null;
BufferedReaderbr=null;
try
{
ss=newServerSocket(8888);
s=ss.accept();
dis=newDataInputStream(s.getInputStream());
dos=newDataOutputStream(s.getOutputStream());
br=newBufferedReader(newInputStreamReader(System.in));
while(true)
{
Stringstr=dis.readUTF();
System.out.println("对方说的是:
"+str);
if(str.equalsIgnoreCase("再见"))
break;
str=br.readLine();
dos.writeUTF(str);
if(str.equalsIgnoreCase("再见"))
break;
}
}
catch(SocketExceptione)
{
System.out.println("网络连接出错,程序终止");
}
catch(IOExceptione)
{
System.out.println("读写数据出错,程序终止");
}
catch(Exceptione)
{
}
finally
{
try
{
dis.close();
dos.close();
s.close();
ss.close();
}
catch(Exceptione)
{
}
}
}
}
任意一方都可以连着说
importjava.io.*;
import.*;
publicclassTClient
{
publicstaticvoidmain(String[]args)throwsException
{
Sockets=newSocket("127.0.0.1",8888);
DataInputStreamdis=newDataInputStream(s.getInputStream());
DataOutputStreamdos=newDataOutputStream(s.getOutputStream());
newClientRead(dis).start();
newClientWriter(dos).start();
}
}
classClientReadextendsThread
{
privateDataInputStreamdis=null;
publicClientRead(DataInputStreamdis)
{
this.dis=dis;
}
publicvoidrun()
{
while(true)
{
try
{
Stringstr=dis.readUTF