黑马程序员_网络程序设计
来源:互联网 发布:安卓虚拟内存软件 编辑:程序博客网 时间:2024/04/27 17:58
网络程序设计是java的重要组成部分,其中包括socket,DatagramSocket,DatagramPacket编程等。java网络编程分为需要连接的TCP编程和无连接的UDP编程。在java中Socket是网络上运行的两个程序间双向通信的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的实现网络上的数据传递。这个对象有两个特殊方法getInputStream(), getOutputStream() .Socket包括两种操作方式:面向连接的和面向无连接的。
在java中面向操作类有两种形式:分别是客户端和服务器,首先讨论下使用无连接的UdP,在发送端用键盘输入字符发送到接受端,接受端打印接收到的数据和IP,端口程序如下:
import java.net.*;
import java.io.*;
class UdpSend
{
public static void main(String[] args)throws Exception
{
DatagramSocket ds=new DatagramSocket();
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String line=null;
while((line=br.readLine())!=null)
{
if("over".equals(line))
break;
byte[] buf=line.getBytes();
DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10001);
ds.send(dp);
}
ds.close();
}
}
class UdpRece
{
public static void main(String[] args)throws Exception
{
DatagramSocket ds=new DatagramSocket(10001);
while(true)
{
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length);
ds.receive(dp);
String ip=dp.getAddress().getHostAddress();
String data=new String(dp.getData(),0,dp.getLength());
int port=dp.getPort();
System.out.println(ip+"::"+data+"::"+port);
}
}
}
关于面向连接的TCP编程 实例客户登录,该实例要完成:客户端输入用户名,发送到服务端,服务端校验用户名是否存在,存在就打印某用户已登录,并向客户端发送某某用户欢迎光临,如不存在该用户就打印某某尝试登录,向客户端发送某某用户名不存在。源程序如下:
import java.net.*;
import java.io.*;
class LoginClient
{
public static void main(String[] args)throws Exception
{
Socket s=new Socket("127.0.0.1",10010);
BufferedReader bufr=new BufferedReader
(new InputStreamReader(System.in));
PrintWriter out=new PrintWriter
(s.getOutputStream(),true);
BufferedReader bufIn=new BufferedReader
(new InputStreamReader(s.getInputStream()));
for(int x=0;x<3;x++)
{
String line=bufr.readLine();
if(line==null)
break;
out.println(line);
String info=bufIn.readLine();
System.out.println("info:"+info);
if(info.contains("欢迎"))
break;
}
bufr.close();
s.close();
}
}
class UserThread implements Runnable
{
private Socket s;
UserThread(Socket s)
{
this.s=s;
}
public void run()
{
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip+".....connected");
try{
for(int x=0;x<3;x++)
{
BufferedReader bufIn=new BufferedReader
(new InputStreamReader(s.getInputStream()));
String name=bufIn.readLine();
if(name==null)
break;
BufferedReader bufr=new BufferedReader
(new FileReader("user.txt"));
PrintWriter out=new PrintWriter(s.getOutputStream(),true);
String line=null;
boolean flag=false;
while((line=bufr.readLine())!=null)
{
if(line.equals(name))
{
flag=true;
break;
}
}
if(flag)
{
System.out.println(name+",已登录");
out.println(name+",欢迎光临");
break;
}
else
{
System.out.println(name+",尝试登陆");
out.println(name+",用户名不存在");
}
}
s.close();
}catch(Exception e)
{
throw new RuntimeException(ip+"校验失败");
}
}
}
class LoginServer
{
public static void main(String[] args)throws Exception
{
ServerSocket ss=new ServerSocket(10010);
while(true)
{
Socket s=ss.accept();
new Thread(new UserThread(s)).start();
}
}
}
这里面实现了多线程:UserThread是实现了Runnable,使服务器可以同时接受多个客户端的请求,另外还用到了IO编程。
------- android培训、java培训、期待与您交流! ----------
- 黑马程序员_网络程序设计
- 黑马程序员——Java 网络程序设计
- 黑马程序员_枚举
- 黑马程序员_多线程
- 黑马程序员_反射
- 黑马程序员_泛型
- 黑马程序员_注解
- 黑马程序员_注解
- 黑马程序员_泛型
- 黑马程序员_代理
- 黑马程序员_继承
- 黑马程序员_多态
- 黑马程序员_线程
- 黑马程序员_泛型
- 黑马程序员_反射
- 黑马程序员_泛型
- 黑马程序员_反射
- 黑马程序员_内省
- pysqlite
- 9月第2个星期
- 单片机中断系统(部分以AT89S52为例)
- 原地归并排序变形
- 无法在显示列表中存储的OGL函数
- 黑马程序员_网络程序设计
- 更详细的,关于rebar
- scheme简介(1)
- 自定义标签实现分页功能[看了点网上的,自己在写的。还不错。欢迎点评]
- daydayup---->Poi操作
- 64位机器上的控件注册
- asp.net mvc 火狐浏览器下中文参数乱码问题解决方案
- 遍历数据库中的存储过程,触发器
- hdu 4288 Coder (2012 ACM/ICPC Asia Regional Chengdu Online)