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

java的基础网络编程:TCP/UDP

2015-11-23 22:18 691 查看
1.TCP





服务器端:

import java.io.*;
import java.net.*;
import java.util.*;

public class TCPServer
{
public static void main(String args[])
{
int count=0;
try
{
ServerSocket server=new ServerSocket(8888); //创建绑定端口8888的服务器套接字
System.out.println("服务器对端口进行监听");
//服务器循环接收客户端的链接请求
boolean flag=true;
while(flag)
{
Socket st=server.accept();//接收客户端请求,返回对应的Socket
DataInputStream din=new DataInputStream(st.getInputStream()); //获取当前链接的输入流,并利用处理流进行封装
DataOutputStream dout=new DataOutputStream(st.getOutputStream());//获取当前链接的输出流,并利用处理流进行封装
System.out.println("这是第 "+(++count)+"个客户访问");
System.out.println("客户端IP地址:"+st.getInetAddress());
System.out.println("客户端信息: "+din.readUTF());

//向客户端发送信息
dout.writeUTF("你好!已收到信息");
if(count==2)  //设定一个条件,自设!
flag=false;

//关闭流
din.close();
dout.close();
//关闭套接字
st.close();

}
server.close();

}
catch(Exception e)
{
e.printStackTrace();
}

}

}


客户端:

import java.io.*;
import java.net.*;
import java.util.*;

public class TCPClient
{
public static void main(String args[])
{
try
{
Socket sc=new Socket("127.0.0.1",8888); //创建链接到服务器端口的套接字
DataInputStream din=new DataInputStream(sc.getInputStream()); //获取当前链接的输入流,并利用处理流进行封装
DataOutputStream dout=new DataOutputStream(sc.getOutputStream());//获取当前链接的输出流,并利用处理流进行封装

//向服务器发送数据
dout.writeUTF("hello server!");
System.out.println(din.readUTF());
//关闭流
din.close();
dout.close();
sc.close();
}

catch(Exception e)
{
e.printStackTrace();
}

}
}


PS:可以在这基础上扩展成基于TCP的聊天小程序。

2.UDP





服务器端:

import java.io.*;
import java.net.*;
import java.util.*;

public class UDPServer
{
public static void main(String args[]) throws IOException
{
DatagramSocket server=new DatagramSocket(8888); //创建udp套接字
boolean flag=true;
while(flag)
{
//接收客户端的信息
byte[] recvbuf=new byte[100];
DatagramPacket recvbag=new DatagramPacket(recvbuf,recvbuf.length);
server.receive(recvbag); //接收数据包
String recv=new String(recvbag.getData(),0,recvbag.getLength()); //拆包,得到缓冲区的数据
int port=recvbag.getPort();
InetAddress addr=recvbag.getAddress();
System.out.println(port+": "+recv);
if(recv.equals("bye"))
flag=false;
//向客户端发送信息
byte[] sendbuf=new byte[200];
String sendStr; //键盘输入发送内容
Scanner in=new Scanner(System.in);
System.out.println("请输入内容:");
sendStr=in.nextLine();
sendbuf=sendStr.getBytes();
DatagramPacket sendbag=new DatagramPacket(sendbuf,sendbuf.length,addr,port);
server.send(sendbag); //发送

}
server.close();
}

}


客户端:

import java.io.*;
import java.net.*;
import java.util.*;

public class UDPClient
{
public static void main(String args[]) throws IOException
{
DatagramSocket client=new DatagramSocket(); //创建udp套接字,客户端不需要绑定端口
boolean flag=true;
while(flag)
{
//向发送服务器内容
byte[] sendbuf=new byte[200];
String sendStr; //键盘输入发送内容
System.out.println("请输入内容:");
Scanner in=new Scanner(System.in);
sendStr=in.nextLine();
sendbuf=sendStr.getBytes();
//发送方的端口和IP地址
int port=8888;
InetAddress addr= InetAddress.getByName("127.0.0.1");
//创建发送的数据报包
DatagramPacket sendbag=new DatagramPacket(sendbuf,sendbuf.length,addr,port);
//发送
client.send(sendbag);

if(sendStr.equals("bye"))
flag=false;

//接收服务器发来的数据
byte[] recvbuf=new byte[100];
DatagramPacket recvbag=new DatagramPacket(recvbuf,recvbuf.length); //创建接收报包

client.receive(recvbag); //接收数据包
String recv=new String(recvbag.getData(),0,recvbag.getLength()); //拆包,得到缓冲区的数据
int srvport=recvbag.getPort();
InetAddress srvaddr=recvbag.getAddress();
System.out.println(srvport+": "+recv);

}
client.close();
}

}


PS:这是基于UDP的聊天程序,以bye来结束链接。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: