实训第四天(客户端服务器通信)
本机表示形式的四种形式
127.0.0.1
192.168.1.112
localhost
电脑自身名字
客户端和服务器的通信
TCP通信
//客户端
public class testclient {
public static void main(String[] args) throws UnknownHostException,
IOException {
Socket <u>c</u> =new Socket("localhost",8888);
OutputStream out = c.getOutputStream();
InputStream in =c.getInputStream();
out.write("我是客户端".getBytes());
//将流置于流末尾
c.shutdownOutput();
out.flush();
byte b [] = new byte[1024];
int sum;
String str1 = "";
while((sum=in.read(b))!=-1) {
String str = new String (b,0,sum);
str1+=str;
}
System.out.println("服务器说"+str1);
}
}
//服务器
public class testserver {
public static void main(String[] args) throws IOException {
//创建服务端对象,指定端口
ServerSocket <u>s</u> = new ServerSocket(8888);
while(true) {
System.out.println("服务器已启动……");
//监听端口
Socket c =s.accept();
//获取客户端输入流
InputStream in =c.getInputStream();
//获得客户端输出流
OutputStream out =c.getOutputStream();
//获取输入信息
byte b[] =new byte[1024];
int sum;
String str1 = "";
while((sum=in.read(b))!=-1) {
String str = new String (b,0,sum);
str1+=str;
}
System.out.println("客户端说"+str1);
out.write("我是服务器".getBytes());
out.flush();
out.close();
}
}
}
UDP通信
//客户端
//package udpclient;
import java.io.*;
import java.net.*;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
//package udpclient;客户端
import java.io.*;
import java.net.*;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.ServerSocket;
public class udpClient {
public static void main(String args[]) throws Exception
{
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
DatagramSocket ClientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("localhost");
byte[ ] sendData = new byte[100];
byte[ ] receiveData = new byte[100];
System.out.println("please input some words:");
while(true){
String sentence = inFromUser.readLine();
sendData = sentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sentence.length(), IPAddress, 9876);//创建一个用于发送数据报的DatagramPacket类对象。
ClientSocket.send(sendPacket);
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
ClientSocket.receive(receivePacket);
String modifiedSentence = new String(receivePacket.getData());
System.out.println("FROM Server:" + modifiedSentence);
}
//ClientSocket.close();
}
}
//服务器
import java.io.*;
import java.net.*;
public class udpserver {
public static void main(String args[]) throws Exception
{
DatagramSocket ServerSocket = new DatagramSocket(9876); //创建用于数据报通信的socket对象,并且把它绑定到本地主机指定的端口port。
byte[] receiveData = new byte[100];
byte[] sendData = new byte[100];
System.out.println("waiting......");
while(true)
{
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); //创建一个用于接收数据报的DatagramPacket类对象。
ServerSocket.receive(receivePacket);
String sentence = new String(receivePacket.getData(),0,receivePacket.getLength());
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort(); //客户端端口
//System.out.println("FROM Client:" + sentence+" ip:"+IPAddress.toString()+",port:"+port);
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, capitalizedSentence.length(), IPAddress, port); //创建一个用于发送数据报的DatagramPacket类对象。
ServerSocket.send(sendPacket);
}
//ServerSocket.close();
}
}