java 调用socket接口程序

zhangfengyi 2017-05-11 04:42:17
服务端用C写的socket接口程序,客户端用java调用,并返回值,写样写,大侠给个demo,网上找了一些不好用。
这两个直接调用是可以的,如果我把IP,端口改成C写的服务端就会报错


client

public static void main(String[] args) {
// TODO Auto-generated method stub
String str = null;
Socket clientSocket; // 创建客户端套接字
DataInputStream in = null; // 创建DataInputStream对象
DataOutputStream out = null; // 创建DataOutputStream对象
try {
clientSocket = new Socket("192.168.1.81", 6001); // 实例化Socket对象
//clientSocket = new Socket("192.168.152.139", 6379);
in = new DataInputStream(clientSocket.getInputStream()); // 实例化DataInputStream对象
// 实例化DataOutputStream对象
out = new DataOutputStream(clientSocket.getOutputStream());
out.writeUTF("001503<?xml version=1.0 encoding=\"gbk\"?><PACKAGE><BODY><msgtype>0100</msgtype><procode>350000</procode><MerID>0P3</MerID><OrderNo>20170302165215437538</OrderNo><sysno>000000000000</sysno><cardno>0000000000000000000</cardno><traceno>987654</traceno><termid>00904016</termid><CurrCode>142</CurrCode><CurrCodeCIQ>156</CurrCodeCIQ><PayAmount>000000032450</PayAmount><MerNo>037132975100003</MerNo><RealName>张三</RealName><CredentialsType>01</CredentialsType><CredentialsNo>410327199303067610</CredentialsNo><ShoppingDate>20170302</ShoppingDate><InternetDomainName>www.kjm2b.com</InternetDomainName><ECommerceCode>4301365022</ECommerceCode><ECommerceName>步步高电子商务有限责任公司</ECommerceName><MerCode>4301365022</MerCode><MerName>步步高电子商务有限责任公司</MerName><CbepComCode>4307600384</CbepComCode><CbepComName>步步高电~子商务有限责任公司</CbepComName><CbepMerCode>4307600384</CbepMerCode><CbepMerName>步步高电子商务有限责任公司</CbepMerName><GoodsAmount>000000029000</GoodsAmount><TaxAmount>000000003450</TaxAmount><Freight>000000000000</Freight><InsuredFee>000000000000</InsuredFee><Mobile></Mobile><Email></Email><BizTypeCode>2</BizTypeCode><OriOrderNo>201612082002515</OriOrderNo><PayNo>0P3000000000000</PayNo><PaymentType>0</PaymentType><IEType>I</IEType><OrganType>1</OrganType><CustomsCode>100014</CustomsCode><PortCode>4612</PortCode><CIQOrgCode>410900</CIQOrgCode><BusinessType>B2B2C</BusinessType><CreTime>20170302165215</CreTime><GetResultTime>20170302165215</GetResultTime></BODY></PACKAGE>"); // 写数据
while (true) {
str = in.readUTF(); // 读取流中数据
out.writeUTF(((int) (Math.random() * 10) + 1) + ""); // 向流中写入0到10之间的随机数
System.out.println("客户端收到:" + str); // 输出信息
Thread.sleep(1000); // 线程休眠
}
} catch (Exception e) {
e.printStackTrace();
}
}

server:

public static void main(String[] args) {
// TODO Auto-generated method stub
ServerSocket serverSocket = null; // 创建服务器端套接字
Socket clientSocket = null; // 创建客户端套接字
String str = null;
DataOutputStream out = null; // 创建DataOutputStream类对象
DataInputStream in = null; // 创建DataInputStream类对象
try {
serverSocket = new ServerSocket(4331); // 实例化ServerSocket对象
clientSocket = serverSocket.accept(); // 接收客户的套接字连接呼叫
in = new DataInputStream(clientSocket.getInputStream()); // 实例化DataInputStream对象
out = new DataOutputStream(clientSocket.getOutputStream()); // 实例化DataOutputStream对象
while (true) {
str = in.readUTF(); // 读取客户放入连接中的信息
out.writeUTF("hello,我是服务器"); // 通过输出流向线路中写信息
out.writeUTF(str);
System.out.println("服务器收到:" + str);
Thread.sleep(1000); // 线程休眠
}
} catch (Exception e) {
e.printStackTrace();
}
}
...全文
856 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
X-i-n 2017-05-16
  • 打赏
  • 举报
回复
你的DEMO里client用readUTF读,所以它的期望的合法内容必须是UTF8,如果这个异常是必现的,基本上能确定是服务器在发送的时候没有使用相同的编码。 收和发的时候有两个选择: 1。确定编码、并且两端统一的前提下,可以直接传输string 2。不确定的话,必须发送方按特定编码转成 byte数组再发送,接收方接收bute数组,然后根据约定好的编码自己去解码成string。
zhangfengyi 2017-05-16
  • 打赏
  • 举报
回复
java 与 C socket 通信,java是客户端,C是服务端,客户端有什么要注意的吗

4,387

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧