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来结束链接。