一般涉及到网络的应用,都会提到两个‘端’,一个提供服务叫服务端;一个申请服务叫客户端。一台服务器电脑可以通过服务程序向外提供多个服务(如http/ftp)。作为一台外网服务器,也就是一个服务端,它必须有一个固定的IP,我们就是通过这个IP访问到这台电脑,要想访问一个特定的服务,就得指定端口号,这是区分不同服务的关键,1-1024为系统自留端口。
ServerSocket:侦听所有的客户端向服务端发送的建立套接字请求,然后返回套接字对象Socket,客户端和服务端的连接建立。
构建一个ServerSocket对象,需要指定一个端口号,侦听到连接请求,获得一个Socket对象,建立Socket---Socket的连接
import java.io.*;
import java.net.*;
public class JabberServer{
public static fianl int port=8080;
public static void main(String[] args){
ServerSocket ss=new ServerSocket(port);
System.out.println(ss);
try{
Socket s=ss.accept();
System.out.println(s);
try{
BufferedReader br=new BufferedReader(
new InputStreamReader(
s.getInputStream()
)
);
//建立连接后,向服务器写入输出内容,只有当输入内容缓存每次被刷新,才能通过网络发送下一批消息
PrintWriter pw=new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
s.getOutputStream();
)
)
,true);
String str=new String();
int i=0;
while(true){
str=br.readLine();
System.out.println(str);
pw.println(++i+"content from server");
if(str.equals("END")
break;
}
}finally{
System.out.println("Socket close");
s.close();
}
}finally{
System.out.println("ServerSocket close");
ss.close();
}
}
}
import java.io.*;
import java.net.*;
public class JabberClient{
public static void main(String[] args) thrwos Exception{
InetAddress add=InetAddress.getByName(null);
//InetAddress add=InetAddress.getByName("localhost");
//InetAddress add=InetAddress.getByName("127.0.0.1");
System.out.println(add);
Socket s=new Socket(add,JabberServer.port);
System.out.println(s);
try{
//建立连接后,向服务器写入输出内容,只有当输入内容缓存每次被刷新,才能通过网络发送下一批消息
PrintWriter pw=new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
s.getOutputStream()
)
)
,true);
//获得服务器返回的消息
BufferedReader br=new BufferedReader(
new InputStreamReader(
s.getInputStream()
)
);
String str=new String();
for(int i=0;i<10;i++){
pw.println(i+"content from client");
str=br.readLine();
System.out.println(str);
}
//告诉服务端,客户端内容写入完毕
pw.println("END");
}finally{
System.out.println("Socket close");
s.close();
}
}
}
/**--注意--**/
以上代码都是在文本编辑器中写的,可能会有些许纰漏