_151_Java_基于Socket的TCP编程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了_151_Java_基于Socket的TCP编程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3585字,纯文字阅读大概需要6分钟。
内容图文
![_151_Java_基于Socket的TCP编程](/upload/InfoBanner/zyjiaocheng/855/cbd62ec43c6048e79a525b9bc11f1633.jpg)
-----------------
-------------------
--------------------
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import org.junit.Test;
//客户端向服务器发送信息,服务端输出信息到控制台上,服务端同时向客户端发送信息
public class TestTCP2 {
//客户端
@Test
public void client() {
OutputStream os=null;
Socket socket=null;
InputStream inputStream =null;
//utf-8:中文字符存儲是三个字节
try {
socket=new Socket(InetAddress.getByName("127.0.0.1"), 8989);
os = socket.getOutputStream();
os.write("as的d客户端jjff".getBytes());
//shutdownOutput:显示告诉服务端已经接受完毕
socket.shutdownOutput();
inputStream = socket.getInputStream();
//utf-8:中文字符是三个字节
//GBK、GB2312收编的汉字占2个字节
//实用的 Unicode 版本对应于 UCS-2,使用16位的编码空间。也就是每个字符占用2个字
//UCS-2 就改名成了 UTF-16。
byte[]b=new byte[6];
int len;
//此处做一个简单的测试(这里是UTF-8编码)
//每次存储4个字节,然后检测是否有中文被拆开,有拆开则需要补字节
while((len=inputStream.read(b,0,4))!=-1) {
boolean flag=false;
if(b[3]<0) {
int num=0;
for(int i=1;i<3;i++) {
if(b[i]>0) {
num++;
}
}
inputStream.read(b,4,num);
len+=num;
flag=true;
System.out.println(len);
}
if(b[0]<0) {
inputStream.read(b,4,2);
len+=2;
flag=true;
System.out.println(len+" 补字节");
}
String string = new String(b,0,len);
System.out.println(string);
for(int i=0;i<len;i++) {
System.out.println(b[i]);
}
if(flag) {
b[4]=0;
b[5]=0;
}
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(inputStream!=null) {
try {
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(os!=null) {
try {
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(socket!=null) {
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//服务端
@Test
public void server() {
ServerSocket serverSocket=null;
Socket socket=null;
InputStream inputStream=null;
OutputStream outputStream = null;
try {
serverSocket = new ServerSocket(8989);
socket = serverSocket.accept();
inputStream = socket.getInputStream();
//utf-8:中文字符是三个字节
//GBK、GB2312收编的汉字占2个字节
//实用的 Unicode 版本对应于 UCS-2,使用16位的编码空间。也就是每个字符占用2个字
//UCS-2 就改名成了 UTF-16。
byte[]b=new byte[6];
int size=b.length;
int len;
//此处做一个简单的测试(这里是UTF-8编码)
//每次存储4个字节,然后检测是否有中文被拆开,有拆开则需要补字节
while((len=inputStream.read(b,0,4))!=-1) {
boolean flag=false;
if(b[3]<0) {
int num=0;
for(int i=1;i<3;i++) {
if(b[i]>0) {
num++;
}
}
inputStream.read(b,4,num);
len+=num;
flag=true;
System.out.println(len);
}
if(b[0]<0) {
inputStream.read(b,4,2);
len+=2;
flag=true;
System.out.println(len+" fjghjg");
}
String string = new String(b,0,len);
System.out.println(string);
for(int i=0;i<len;i++) {
System.out.println(b[i]);
}
if(flag) {
b[4]=0;
b[5]=0;
}
}
outputStream = socket.getOutputStream();
outputStream.write("as的d客户端jjff".getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(inputStream!=null) {
try {
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(socket!=null) {
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(serverSocket!=null) {
try {
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
内容总结
以上是互联网集市为您收集整理的_151_Java_基于Socket的TCP编程全部内容,希望文章能够帮你解决_151_Java_基于Socket的TCP编程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。