实现Client端功能的ClientApp.java原文件:import java.net.*;
import java.io.*;
import java.lang.*;public class ClientApp
{
public static void main(String args[])
{
try
{
//创建通讯并且和主机Rock连接
Socket cSocket=new Socket("192.168.100.188",8018);
//打开这个Socket的输入/输出流
OutputStream os=cSocket.getOutputStream();
DataInputStream is=new DataInputStream(cSocket.getInputStream()); int c;
boolean flag=true; String responseline; while(flag)
{
//从标准输入输出接受字符并且写如系统
while((c=System.in.read())!=-1)
{
os.write((byte)c);
if(c=='\n')
{
os.flush();
//将程序阻塞,直到回答信息被收到后将他们在标准输出上显示出来
responseline=is.readLine();
System.out.println("Message is:"+responseline);
}
}
}
os.close();
is.close();
cSocket.close(); }
catch(Exception e)
{
System.out.println("Exception :"+ e.getMessage());
}
}
}
实现Server端功能的ServerApp.java原文件:import java.net.*;
import java.io.*;public class ServerApp
{
public static void main(String args[])
{
try
{
boolean flag=true;
Socket clientSocket=null;
String inputLine;
int c; ServerSocket sSocket=new ServerSocket(8018);
System.out.println("Server listen on:"+sSocket.getLocalPort()); while(flag)
{
clientSocket=sSocket.accept();
DataInputStream is= new DataInputStream(new BufferedInputStream(clientSocket.getInputStream()));
OutputStream os=clientSocket.getOutputStream(); while((inputLine=is.readLine())!=null)
{
//当客户端输入stop的时候服务器程序运行终止!
if(inputLine.equals("stop"))
{
flag=false;
break;
}
else
{
System.out.println(inputLine); while((c=System.in.read())!=-1)
{
os.write((byte)c);
if(c=='\n')
{
os.flush(); //将信息发送到客户端
break;
}
}
}
}
is.close();
os.close();
clientSocket.close(); }
sSocket.close();
}
catch(Exception e)
{
System.out.println("Exception :"+ e.getMessage());
}
}
}while((c=System.in.read())!=-1)
os.write((byte)c);
if(c=='\n')
这三个语句分别是什么意思?我看不懂还有,OutputStream os=cSocket.getOutputStream();有这样的语句,但OutputStream不是一个抽象类吗?抽象类不是不可以建立对象的么?
为什么这里会是这样?问题比较菜,请教啦
import java.io.*;
import java.lang.*;public class ClientApp
{
public static void main(String args[])
{
try
{
//创建通讯并且和主机Rock连接
Socket cSocket=new Socket("192.168.100.188",8018);
//打开这个Socket的输入/输出流
OutputStream os=cSocket.getOutputStream();
DataInputStream is=new DataInputStream(cSocket.getInputStream()); int c;
boolean flag=true; String responseline; while(flag)
{
//从标准输入输出接受字符并且写如系统
while((c=System.in.read())!=-1)
{
os.write((byte)c);
if(c=='\n')
{
os.flush();
//将程序阻塞,直到回答信息被收到后将他们在标准输出上显示出来
responseline=is.readLine();
System.out.println("Message is:"+responseline);
}
}
}
os.close();
is.close();
cSocket.close(); }
catch(Exception e)
{
System.out.println("Exception :"+ e.getMessage());
}
}
}
实现Server端功能的ServerApp.java原文件:import java.net.*;
import java.io.*;public class ServerApp
{
public static void main(String args[])
{
try
{
boolean flag=true;
Socket clientSocket=null;
String inputLine;
int c; ServerSocket sSocket=new ServerSocket(8018);
System.out.println("Server listen on:"+sSocket.getLocalPort()); while(flag)
{
clientSocket=sSocket.accept();
DataInputStream is= new DataInputStream(new BufferedInputStream(clientSocket.getInputStream()));
OutputStream os=clientSocket.getOutputStream(); while((inputLine=is.readLine())!=null)
{
//当客户端输入stop的时候服务器程序运行终止!
if(inputLine.equals("stop"))
{
flag=false;
break;
}
else
{
System.out.println(inputLine); while((c=System.in.read())!=-1)
{
os.write((byte)c);
if(c=='\n')
{
os.flush(); //将信息发送到客户端
break;
}
}
}
}
is.close();
os.close();
clientSocket.close(); }
sSocket.close();
}
catch(Exception e)
{
System.out.println("Exception :"+ e.getMessage());
}
}
}while((c=System.in.read())!=-1)
os.write((byte)c);
if(c=='\n')
这三个语句分别是什么意思?我看不懂还有,OutputStream os=cSocket.getOutputStream();有这样的语句,但OutputStream不是一个抽象类吗?抽象类不是不可以建立对象的么?
为什么这里会是这样?问题比较菜,请教啦
os.write((byte)c);
if(c=='\n')从控制台读入用户输入的字符,直到遇到换行符,'\n'是换行的转义符至于抽象类和接口是干什么的,请自己看书,看书比你在这问快多了
OutputStream os=cSocket.getOutputStream(); // 返回的是子类的实例, 读一下Socket类的Api就知道了
while((c=System.in.read())!=-1)中,这个c在前面是定义为int c的.我在想,c=System.in.read()这个如果读取的文件里面的数据如果不是数值型的那这个c会是怎么样的?
另外怎么样的情况下这个c会等于-1?
os.write((byte)c);就把它写到os里
if(c=='\n')判断c是否是换行符.
还是不怎么懂
if(c == '\n')和if(c="\n")有何区别呢? os.write((byte)c);中为什么要在c前面加个(byte)?
""表示一个字符串
如果写成if(c=="/n")我没试过,也许会报错
os.write((byte)c);
(byte)强制转换为byte类型,
至于此处为什么这么写,请查一下OutputStream的write方法,这些细节的地方记不清了
应该是if(c == '\n')和if(c='\n')有何区别呢?是不是后者成为赋值操作了?不能用来判断?
还有一个问题,
DataInputStream is= new DataInputStream(new BufferedInputStream(clientSocket.getInputStream()));这个语句中
clientSocket.getInputStream()是返回InputStream类的子类么?具体是哪个子类呢?
我看的这本书讲得很不详细,郁闷死了谢谢