網絡編程的實例實現代碼

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);
//獲得寫入流
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();
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章