Java利用TCP协议实现客户端与服务器通信【附通信源码】
服务器端程序
======
package server_1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class MyTcp {
private ServerSocket server; //设置服务器套接字
private Socket client; //设置客户端套接字
//连接客户端函数
void getServer()
{
try {
server = new ServerSocket(1100); //建立服务器 端口为1100
System.out.println(“服务器建立成功!正在等待连接…”);
client = server.accept(); //调用服务器函数对客户端进行连接
System.out.println(“客户端连接成功!ip为:” + client.getInetAddress()); //返回客户端IP
getClientMessage(); //调用信息传输和接收函数
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
void getClientMessage()
{
try {
while (true) {
InputStream is = client.getInputStream(); //获取到客户端的输入流
byte[] b = new byte[1024]; //定义字节数组
int len = is.read(b); //由于信息的传输是以二进制的形式,所以要以二进制的形式进行数据的读取
String data = new String(b, 0,len);
System.out.println(“客户端发来消息:” + data);
//定义发送给客户端的输出流
OutputStream put = client.getOutputStream();
String putText = “我已经收到!欢迎你!”;
put.write(putText.getBytes()); //将输出流信息以二进制的形式进行写入
}
} catch (Exception e) {
// TODO: handle exception
}
try {
//判断客户端字节流不是空,则关闭客户端
if (server != null) {
server.close();
}
} catch (Exception e) {
// TODO: handle exception
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MyTcp myTcp = new MyTcp(); //调用该类生成对象
myTcp.getServer(); //调用方法
}
}
客户端程序
=====
package client_1;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class MyClient {
private Socket client; //定义客户端套接字
//建立客户端函数
void getClient()
{
try {
client = new Socket(“127.0.0.1”, 1100); //建立客户端,使用的IP为127.0.0.1,端口和服务器一样为1100
System.out.println(“客户端建立成功!”);
setClientMessage(); //调用客户端信息写入函数
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//定义客户端信息写入函数
void setClientMessage()
{
try {
OutputStream pt = client.getOutputStream(); //建立客户端信息输出流
String printText = “服务器你好!我是客户端!”;
pt.write(printText.getBytes()); //以二进制的形式将信息进行输出
InputStream input = client.getInputStream(); //建立客户端信息输入流
byte [] b = new byte[1024]; //定义字节数组
int len = input.read(b); //读取接收的二进制信息流
String data = new String(b, 0,len);
System.out.println(“收到服务器消息:” + data);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
//如果客户端信息流不为空,则说明客户端已经建立连接,关闭客户端
if (client != null) {
client.close();
}
} catch (Exception e) {
// TODO: handle exception
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//生成客户端类对象
MyClient myClient = new MyClient();
最后
金三银四到了,送上一个小福利!
static void main(String[] args) {
// TODO Auto-generated method stub
//生成客户端类对象
MyClient myClient = new MyClient();
最后
金三银四到了,送上一个小福利!
[外链图片转存中…(img-86rIUTXY-1714343841852)]
[外链图片转存中…(img-wPrnG3x8-1714343841852)]
[外链图片转存中…(img-X1SKa10v-1714343841852)]
本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录