您的位置:首页 > 理论基础 > 计算机网络

网络编程的实例实现代码

2014-11-06 21:01 405 查看
1、在socket流中接收发送字符串

package pb.socket.loginObj;

import java.io.BufferedInputStream;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.zip.InflaterInputStream;

//服务器端

public class LoginServer {

public static void main(String[] args) {
try {
//1、建立一个服务器socket(ServerSocket)绑定制定端口开始监听
ServerSocket serverSocket=new ServerSocket(8800);
//2、使用accept()方法阻塞等待监听,获得新的连接
Socket socket=serverSocket.accept();
//3、获得输入流
InputStream is=socket.getInputStream();
BufferedReader bis=new BufferedReader(new InputStreamReader(is));
//获得写入流
OutputStream os=socket.getOutputStream();
PrintWriter pw=new PrintWriter(os);
//4、获取用户输入信息
String info=null;
while((info=bis.readLine())!=null){
System.out.println("我是服务器,用户信息为:"+info);
}

//在流中写入信息
String reply="已经收到你的登陆信息";
pw.write(reply);
//5、关闭资源
pw.close();
bis.close();
is.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

package pb.socket.loginObj;

import java.io.BufferedInputStream;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.Socket;

import java.net.UnknownHostException;

public class LoginClient {

public static void main(String[] args) {
try {
//1、建立客户端Socket连接,制定服务器的位置以及端口
Socket socket=new Socket("localhost",8800);
//2、得到socket读写流
OutputStream os=socket.getOutputStream();
PrintWriter pw=new PrintWriter(os);
//读取输入流
InputStream is=socket.getInputStream();
BufferedReader bis=new BufferedReader(new InputStreamReader(is));
//3、利用流按照一定的协议对socket进行读/写操作
String info="用户名:漪静馨;用户密码:123";
pw.write(info);
pw.flush();
//在接受流之前需要关闭写出流
socket.shutdownOutput();
//按照一定的协议对socket进行接受操作
String receive=null;
while((receive=bis.readLine())!=null){
System.out.println(receive);
}
//4、关闭资源
pw.close();
os.close();
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

2、在socket流中发送接受对象

package pb.socket.loginObj;

import java.io.Serializable;

public class User implements Serializable{

private String name;

private String password;

public User(){}

public User(String name,String pass){
name=this.name;
pass=this.password;

}

public String getName() {
return name;

}

public void setName(String name) {
this.name = name;

}

public String getPassword() {
return password;

}

public void setPassword(String password) {
this.password = password;

}

}

package pb.socket.loginStr;

import java.io.BufferedInputStream;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.ObjectInputStream;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.zip.InflaterInputStream;

import pb.socket.loginObj.User;

//服务器端

public class LoginServer {

public static void main(String[] args) {
try {
//1、建立一个服务器socket(ServerSocket)绑定制定端口开始监听
ServerSocket serverSocket=new ServerSocket(8800);
//2、使用accept()方法阻塞等待监听,获得新的连接
Socket socket=serverSocket.accept();
//3、获得输入流
InputStream is=socket.getInputStream();
//用来接受对象的
ObjectInputStream ois=new ObjectInputStream(is);
/
4000
/获得写入流
OutputStream os=socket.getOutputStream();
PrintWriter pw=new PrintWriter(os);
//4、获取用户输入信息
User user=(User)ois.readObject();
System.out.println("用户信息为:"+user.getName()+"--->"+user.getPassword());
//在流中写入信息
String reply="已经收到你的登陆信息";
pw.write(reply);
//5、关闭资源
pw.close();
ois.close();
is.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

package pb.socket.loginStr;

import java.io.BufferedInputStream;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.ObjectOutputStream;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.Socket;

import java.net.UnknownHostException;

import pb.socket.loginObj.User;

public class LoginClient {

public static void main(String[] args) {
try {
//1、建立客户端Socket连接,制定服务器的位置以及端口
Socket socket=new Socket("localhost",8800);
//2、得到socket读写流
OutputStream os=socket.getOutputStream();
//输入一个对象
ObjectOutputStream oos=new ObjectOutputStream(os);
//读取输入流
InputStream is=socket.getInputStream();
BufferedReader bis=new BufferedReader(new InputStreamReader(is));
//3、利用流按照一定的协议对socket进行读/写操作
User user=new User();
user.setName("漪静馨");
user.setPassword("123");
//System.out.println(user.getName()+user.getPassword());
oos.writeObject(user);
//在接受流之前需要关闭写出流
socket.shutdownOutput();
//按照一定的协议对socket进行接受操作
String receive=null;
while((receive=bis.readLine())!=null){
System.out.println(receive);
}
//4、关闭资源
oos.close();
os.close();
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

3、多个客户发送信息回复

package pb.socket.loginMoreClient;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.InetAddress;

import java.net.ServerSocket;

import java.net.Socket;

public class LoginServer {
public static void main(String[] args) {
try {
//1、建立一个服务器socket(ServerSocket)绑定制定端口开始监听
ServerSocket serverSocket=new ServerSocket(8800);
//2、使用accept()方法阻塞等待监听,获得新的连接
int num=0;
//一直处于监听状态
while(true){
Socket socket=serverSocket.accept();
ServerThread serverThread=new ServerThread(socket);
serverThread.start();
//获得客户的数量
num++;
System.out.println("客户数量"+num);
//获得客户的IP信息
InetAddress ia=socket.getInetAddress();
//客户的IP
String ip=ia.getHostAddress();
System.out.println("本客户端IP为:"+ip);
//客户的主机名称
String hostname=ia.getHostAddress();
System.out.println("本客户的主机为:"+hostname);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

package pb.socket.loginMoreClient;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.ObjectInputStream;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.Socket;

import pb.socket.loginObj.User;

/*线程类

 * */

public class ServerThread extends Thread{

Socket socket=null;
//绑定socket
public ServerThread(Socket socket) {
this.socket=socket;
}
@Override
public void run() {
super.run();
//3、获得输入流
InputStream is;
try {
is = socket.getInputStream();
//用来接受对象的
ObjectInputStream ois=new ObjectInputStream(is);
//获得写入流
OutputStream os=socket.getOutputStream();
PrintWriter pw=new PrintWriter(os);
//4、获取用户输入信息
User user=(User)ois.readObject();
System.out.println("用户信息为:"+user.getName()+"--->"+user.getPassword());
//在流中写入信息
String reply="已经收到你的登陆信息";
pw.write(reply);
//5、关闭资源
pw.close();
ois.close();
is.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

package pb.socket.loginMoreClient;

import java.io.BufferedInputStream;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.ObjectOutputStream;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.Socket;

import java.net.UnknownHostException;

import pb.socket.loginObj.User;

public class LoginClient {

public static void main(String[] args) {
try {
//1、建立客户端Socket连接,制定服务器的位置以及端口
Socket socket=new Socket("localhost",8800);
//2、得到socket读写流
OutputStream os=socket.getOutputStream();
//输入一个对象
ObjectOutputStream oos=new ObjectOutputStream(os);
//读取输入流
InputStream is=socket.getInputStream();
BufferedReader bis=new BufferedReader(new InputStreamReader(is));
//3、利用流按照一定的协议对socket进行读/写操作
User user=new User();
user.setName("邹芳");
user.setPassword("1234");
//System.out.println(user.getName()+user.getPassword());
oos.writeObject(user);
//在接受流之前需要关闭写出流
socket.shutdownOutput();
//按照一定的协议对socket进行接受操作
String receive=null;
while((receive=bis.readLine())!=null){
System.out.println(receive);
}
//4、关闭资源
oos.close();
os.close();
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

/*如何在服务器获得每个客户端的ip地址?

InetAddress类:表示互联网协议地址,包含ip地址。是Java对IP弟子的封装。它可以通过Socket的getInetAddress()方法获得。

java.net.InetAddress类常用方法:

getHostAddress()返回IP地址字符串(以文本表现形式)。

getHostName():获取此IP地址的主机名。*/

4、udp实现对话

package pb.socket.ask;

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.SocketAddress;

import java.net.SocketException;

public class AskServer {

public static void main(String[] args) {
//1、创建接收方套接字,并绑定端口号
try {
DatagramSocket ds=new DatagramSocket(8800);
//2、确定数据包接受的数据的数组大小
byte[] buf=new byte[1024];
//3、创建接受类型的数据包,数据将存储在数组中
DatagramPacket dp=new DatagramPacket(buf, buf.length);
//4、通过套接字接收数据
ds.receive(dp);
//5、解析发送方发送的数据,将buf数组从第零位,将擦汗高难度为dp.getLength()封装为一个字符串
String mess=new String(buf,0,dp.getLength());
System.out.println("客户端说:"+mess);
//响应客户端
String reply="你好!我在的,请咨询!";
byte[] replys=reply.getBytes();
//响应地址
SocketAddress sa=dp.getSocketAddress();
//数据包
DatagramPacket dp2=new DatagramPacket(replys, replys.length, sa);
//发送
ds.send(dp2);
//6、释放资源
ds.close();

} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

package pb.socket.ask;

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

import java.net.UnknownHostException;

public class AskClient {

public static void main(String[] args) {
//1、确定发送给服务器的信息,服务器地址及端口
String mess="你好,我想咨询一个问题!";
byte[] buf=mess.getBytes();
InetAddress ia=null;
try {
ia=InetAddress.getByName("localhost");
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int port=8800;
//2、创建数据包,发送中鼎发送制定长度的信息到指定服务器的指定端口
DatagramPacket dp=new DatagramPacket(buf, buf.length,ia,port);
//3、创建DatagramSocket对象
DatagramSocket ds=null;
try {
ds=new DatagramSocket();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//4、向服务器发送数据包
try {
ds.send(dp);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//接受服务器的一个响应并打印
byte[] buf2=new byte[1024];
//创建接收类型的数据包、数据存储在数组中
DatagramPacket dp2=new DatagramPacket(buf2, buf2.length);
try {
ds.receive(dp2);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//解析服务器响应
String reply=new String(buf2,0,dp2.getLength());
System.out.println("服务器的响应为:"+reply);
//5、释放资源
ds.close();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息