Java笔记9(Java网络编程)

[size=large]Java基础9
Java基础9 1

文件结构 1

Java网络编程_netTest1Client/com.test1/MyClient1.java 1

Java网络编程_netTest1Client/com.test1/MyServer1.java 3

Java网络编程_netTest2Client/com.test1/MyClient2.java 4

Java网络编程_netTest2Client/com.test1/ MyServer2.java 5

Java网络编程_netTest3Client/com.test1/MyClient3.java 7

Java网络编程_netTest3Client/com.test1/ MyServer3.java 9

Java网络编程_netTestClient/com.test1/MyServer.java 11

Java网络编程_netTestClient/com.common/User.java 12

Java网络编程_netTestClient/com.test1/MyClient.java 12

Java网络编程_netTestClient/com.common/User.java 13[/size]

[color=red][size=x-large]文件结构 [/size][/color]
[img]http://images.cnblogs.com/cnblogs_com/luowei010101/201108/201108141909475681.png[/img][img]http://images.cnblogs.com/cnblogs_com/luowei010101/201108/201108141909471536.png[/img]
Java网络编程_netTest1Client/com.test1/MyClient1.java 



/**

* 这是一个客户端程序,可以连接服务器端

*/



package com.test1;



import java.io.*;

import java.net.*;



public class MyClient1 {



/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

MyClient1 mc1=new MyClient1();

}



public MyClient1()

{

try {

//Socket()就是去连接某个服务器端,127.0.0.1表示服务器的IP

//9999就是端口号

Socket s=new Socket("127.0.0.1",9999);

//如果s连接成功,就可以发送数据给服务器

//通过pw,向s写数据,true表示即时刷新

PrintWriter pw=new PrintWriter(s.getOutputStream(),true);

pw.println("你好吗?我是客户端");



//客户端接收

InputStreamReader isr=new InputStreamReader(s.getInputStream());

BufferedReader br=new BufferedReader(isr);



String response=br.readLine();



System.out.println("我是客户端!\n我收到了服务器回复的信息:"+response);



} catch (IOException e) {

e.printStackTrace();

}

}

}



Java网络编程_netTest1Client/com.test1/MyServer1.java



/**

* 这是第一个服务器端程序,让它在9999端口监听

* 可以接收从客户端发来的信息

*/



package com.test1;

import java.io.*;

import java.net.*;



public class MyServer1 {



public static void main(String []args)

{

MyServer1 ms1=new MyServer1();

}



public MyServer1()

{

try {

//在9999号端口监听

ServerSocket ss=new ServerSocket(9999);

System.out.println("我是服务器,在9999端口监听...");

//等待某个客户端来连接,该函数会返回一个Scoket连接

Socket s=ss.accept();

System.out.println("有客户端连接");



//要读取取s中传递的数据

InputStreamReader isr=new InputStreamReader(s.getInputStream());

BufferedReader br=new BufferedReader(isr);



String info=br.readLine(); //读



System.out.println("服务器接收到:"+info);



//服务器回复一句话

PrintWriter pw=new PrintWriter(s.getOutputStream(),true);//true表示即时刷新

pw.println("我是服务器,客户端你也好!");



} catch (IOException e) {

e.printStackTrace();

}

}

}



Java网络编程_netTest2Client/com.test1/MyClient2.java



/**

* 半双工通信

* 功能:客户端

*/



package com.test1;

import java.net.*;

import java.io.*;



public class MyClient2 {



/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

MyClient2 mc2=new MyClient2();

}



public MyClient2()

{

try {

//连接服务器端

Socket s=new Socket("127.0.0.1",9999);

//向s写入数据

PrintWriter pw=new PrintWriter(s.getOutputStream(),true);



//先接收从控制台输入的信息

InputStreamReader isr=new InputStreamReader(System.in);

BufferedReader br=new BufferedReader(isr);



//接收从服务器端发送过来的信息

InputStreamReader isr2=new InputStreamReader(s.getInputStream());

BufferedReader br2=new BufferedReader(isr2);



while(true)

{

System.out.println("请输入你想对服务器说的话:");

//客户端先从控制台接收

String info=br.readLine();



//然后把从控制台输入的信息发送给服务器

pw.println(info);

if(info.equals("bye"))

{

System.out.println("对话结束");

s.close();

break;

}

//接收从服务器发来的话

String res=br2.readLine();

System.out.println("服务器说:"+res);

}



} catch (IOException e) {

e.printStackTrace();

}



}

}



Java网络编程_netTest2Client/com.test1/ MyServer2.java



/**

* 半双工通信

* 功能:一个服务器端,在9999端口上监听

*/



package com.test1;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.*;

import java.io.*;



public class MyServer2 {



/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

MyServer2 ms2=new MyServer2();

}



public MyServer2()

{

try {

//在9999端口监听

ServerSocket ss=new ServerSocket(9999);

System.out.println("服务器在9999监听...");

//等待连接

Socket s=ss.accept();



//向s中写信息

PrintWriter pw=new PrintWriter(s.getOutputStream(),true);



//先接收客户端发来的信息(Socket上的)

InputStreamReader isr=new InputStreamReader(s.getInputStream());

BufferedReader br=new BufferedReader(isr);



//接收从控制台输入的信息

InputStreamReader isr2=new InputStreamReader(System.in);

BufferedReader br2=new BufferedReader(isr2);



while(true)

{

String infoFromClient=br.readLine();

System.out.println("客户端发来:"+infoFromClient);

if(infoFromClient.equals("bye"))

{

System.out.println("对话结束!");

s.close();

break;

}



//接收从控制台输入的信息

System.out.println("输入你希望对客户端说的话:");

String response=br2.readLine();

//把从控制台接受的信息送给客户端

pw.println(response);

}



} catch (IOException e) {

e.printStackTrace();

}

}

}



Java网络编程_netTest3Client/com.test1/MyClient3.java



/**

* 全双工通信

* 客户

*/



package com.test1;



import javax.swing.*;



import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.*;

import java.net.*;



public class MyClient3 extends JFrame implements ActionListener{



JTextArea jta=null;

JTextField jtf=null;

JButton jb=null;

JScrollPane jsp=null;

JPanel jp1=null;



//把信息发给客户端的对象

PrintWriter pw=null;



public static void main(String[] args) {

// TODO Auto-generated method stub

MyClient3 ms=new MyClient3();

}



public MyClient3()

{

jta=new JTextArea();

jsp=new JScrollPane(jta);

jtf=new JTextField(10);

jb=new JButton("发送");

jb.addActionListener(this);



jp1=new JPanel();

jp1.add(jtf);

jp1.add(jb);

this.add(jsp,"Center");

this.add(jp1,"South");



this.setSize(300,200);

this.setTitle("QQ简易聊天-客户端");

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);



try {

Socket s=new Socket("127.0.0.1",9988);



InputStreamReader isr=new InputStreamReader(s.getInputStream());

BufferedReader br=new BufferedReader(isr);



pw=new PrintWriter(s.getOutputStream(),true);

while(true)

{

//不停的读取从服务器发来的信息

String info=br.readLine();

jta.append("服务器端对客户端说: "+info+"\r\n");

}

} catch (Exception e) {

e.printStackTrace();

}



}



@Override

public void actionPerformed(ActionEvent e) {

//如果用户按下发送信息的按钮

if(e.getSource()==jb)

{

//把服务器在jtf写的内容发送给客户端

String info=jtf.getText();

//把客户端显示的信息加到jta

jta.append("客户端对服务器说: "+info+"\r\n");

pw.println(info);

//清空jtf中的内容

jtf.setText("");

}

}



}



Java网络编程_netTest3Client/com.test1/ MyServer3.java



/**

* 全双工通信

* 服务器端

*/



package com.test1;

import javax.swing.*;



import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.*;

import java.net.*;



public class MyServer3 extends JFrame implements ActionListener{



JTextArea jta=null;

JTextField jtf=null;

JButton jb=null;

JScrollPane jsp=null;

JPanel jp1=null;



//把信息发给客户端的对象

PrintWriter pw=null;



public static void main(String[] args) {

// TODO Auto-generated method stub

MyServer3 ms=new MyServer3();

}



public MyServer3()

{

jta=new JTextArea();

jsp=new JScrollPane(jta);

jtf=new JTextField(10);

jb=new JButton("发送");

jb.addActionListener(this);



jp1=new JPanel();

jp1.add(jtf);

jp1.add(jb);

this.add(jsp,"Center");

this.add(jp1,"South");



this.setSize(300,200);

this.setTitle("QQ简易聊天-服务器端");

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);



try {

//服务器监听

ServerSocket ss=new ServerSocket(9988);

//等待客户端连接

Socket s=ss.accept();

//System.out.println("服务器端在9988监听!");



InputStreamReader isr=new InputStreamReader(s.getInputStream());

BufferedReader br=new BufferedReader(isr);



pw=new PrintWriter(s.getOutputStream(),true);



//读取从客户端发来的信息

while(true)

{

//读取从客户端发来的信息

String info=br.readLine();

//把信息显示加到文本域中(以追加的形式)

jta.append("客户端对服务器说: "+info+"\r\n");

}

} catch (IOException e) {

e.printStackTrace();

}

}



@Override

public void actionPerformed(ActionEvent e) {

//如果用户按下发送信息的按钮

if(e.getSource()==jb)

{

//把服务器在jtf写的内容发送给客户端

String info=jtf.getText();

jta.append("服务器端对客户端说: "+info+"\r\n");

pw.println(info);

//清空jtf中的内容

jtf.setText("");

}

}

}



Java网络编程_netTestClient/com.test1/MyServer.java



/**

* 功能:网络这间利用 对象流

*/



package com.test1;



import java.net.*;

import java.io.*;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;



import com.common.*;



public class MyServer {



/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

MyServer ms=new MyServer();

}



public MyServer()

{

try {

ServerSocket ss=new ServerSocket(3456);

System.out.println("服务器在3456端口监听...");

Socket s=ss.accept();

//以对象流方式读取(假设客户端发送的是User的一个对象)

ObjectInputStream ois=new ObjectInputStream(s.getInputStream());

User u=(User)ois.readObject();//读取对象



//输出

System.out.println("从客户端接收到:"+u.getName()+" "+u.getPass());

s.close();

} catch (Exception e) {

e.printStackTrace();

}



}

}



Java网络编程_netTestClient/com.common/User.java



package com.common;



public class User implements java.io.Serializable{

//将这个类实现序列化

private String name;

private String pass;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getPass() {

return pass;

}

public void setPass(String pass) {

this.pass = pass;

}



}



Java网络编程_netTestClient/com.test1/MyClient.java



package com.test1;

import java.io.*;

import java.net.*;



import com.common.User;

import com.test1.*;

public class MyClient {



/**

* @param args

*/

public static void main(String[] args) {

//

MyClient mc=new MyClient();

}



public MyClient()

{

try {

Socket s=new Socket("127.0.0.1",3456);

//通过ObjectOutputStream给服务器传送对象

ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream());

User u=new User();

u.setName("维唯为为");

u.setPass("123456");

oos.writeObject(u); //写入对象流

//如果希望一个对象在网络上传输,则需要把这个对象序列化

//System.out.println("ok");

s.close();

} catch (Exception e) {

e.printStackTrace();

}



}

}



Java网络编程_netTestClient/com.common/User.java



package com.common;



public class User implements java.io.Serializable{

//将这个类实现序列化

private String name;

private String pass;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getPass() {

return pass;

}

public void setPass(String pass) {

this.pass = pass;

}



}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值