问题背景:
多数程序猿使用scoket关键字有什么用途。
什么是网络编程?
通过使用套接字来达到进程间通信目的的编程就是网络编程,网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的!中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理!
案例
使用socket,制作一个简单的聊天室
客户端
public class TestClient3 {
public static void main(String[] args) {
try {
// 客户端
InetAddress address = InetAddress.getLocalHost();
Socket socket=new Socket(address,8888); //其中8888,是端口号
BufferedReader input= new BufferedReader(new InputStreamReader(System.in));
OutputStream out=socket.getOutputStream();//获得socket输出流
DataOutputStream dout=new DataOutputStream(out);//转换成数据流
DataInputStream in=new DataInputStream(socket.getInputStream());
System.out.println("客户端==>服务器 $");
String reqStr=input.readLine();
while(!"bye".equals(reqStr)){
dout.writeUTF(reqStr);
System.out.println("服务器相应的数据是 >"+in.readUTF());
reqStr=input.readLine();
}
dout.flush();
dout.close();
in.close();
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
服务端
public class TestServer3 {
public static void main(String[] args) {
//提供对外的接口
ServerSocket server=null;
try {
//服务器,接受处理请求
server= new ServerSocket(8888);
System.out.println("服务器启动成功。。。。。");
while(true){
Socket client=server.accept();// 等待客户端请求
InetAddress reqAddress=client.getInetAddress();
System.out.println(reqAddress+"#"+client.getPort()+"连接到了");
BufferedReader input=new BufferedReader(new InputStreamReader(System.in));//接收控制台的数据
DataInputStream din=new DataInputStream(client.getInputStream());//接受客户端写出的数据
DataOutputStream out=new DataOutputStream(client.getOutputStream());
String reqData=din.readUTF();
while(!"bye".equals(reqData)){
System.out.println(reqAddress.toString().substring(1)+"#"+client.getPort()+reqData);
System.out.println("服务器==>客户端$");
String reqStr=input.readLine();
out.writeUTF(reqStr);
reqData=din.readUTF();
}
out.flush();
din.close();
client.close();
out.close();
}
} catch (IOException e) {
e.printStackTrace();
try {
server.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
这样,简单的聊天室就做好了。