c++代码:
#pragma comment(lib,"ws2_32.lib")
#include<WinSock2.h>
#include<stdio.h>
void main(){
WORD wVersionRequested;//高位字节指定所需要的Winsock库的副本,低位字节则是主版本
WSADATA wsaData;//包含库版本有关信息的结构体
int err;
wVersionRequested = MAKEWORD(1,1);//使用这个函数方便的获得wVersionRequested值,x高位字节,y低位字节
//加载套接字库,确定要使用套接字库的版本
err = WSAStartup(wVersionRequested,&wsaData);//wVersionRequested:该参数用于指定准备加载的Winsock库的版本,wsaData:指向WSADATA的结构体指针
if(0!=err)return;
if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1){
WSACleanup();//如果返回的版本与设定的版本不同,终止对Winsock库的使用
return;
}
/**创建一个套接字(相当于java中的Socket),第一个参数指定地址族,对于TCP/IP协议的套接字,它只能是AF_INET/PF_INET
第二个参数指定Socket类型,对于1.1版本的Socket,只支持两种类型的套接字,SOCK_STREAM指定产生流式的套接字(TCP)
SOCK_DGRAM产生数据包(UDP)套接字。第三个参数是特定的地址家族相关的协议,如果指定为0,那么他就会根据地址格式与套接字类别
自动选择一个合适的协议(推荐)
*/
SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;//创建一个与套接字地址有关的对象(该结构体存放了与本地地址信息)
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//指定为INADDR_ANY允许套接字想任何分配给本地机器的IP地址发送火接收数据
addrSrv.sin_family = AF_INET;//地址家族,必须设置为AF_INET
addrSrv.sin_port = htons(6000);//指定端口
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//在本地地址上关联一个套接字接口
listen(sockSrv,5);//在该端口上监听
SOCKADDR_IN addrClient;//客户端的套接字
int len = sizeof(SOCKADDR);
char sendBuf[100];//消息缓存区
char recvBuf[100];
char tempBuf[100];
SOCKET sockConn = accept(sockSrv,(SOCKADDR*)&addrClient,&len);//得到客服端的连接
printf("%s\n","有客服端连接上来啦");
sprintf(sendBuf,"Welcome %s to chat",inet_ntoa(addrClient.sin_addr));//把字符串写到消息缓存区
//send(sockConn,sendBuf,strlen(sendBuf)+1,0);//把消息发送给客户端
sendto(sockConn,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrSrv,len);
while(1){
//接收消息
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
if((recvBuf[0]=='q')&&(recvBuf[1]=='u')&&(recvBuf[2]=='i')&&(recvBuf[3]=='t'))
{
printf("%s\n","Chat end!");
break;
}
printf("%s\n",recvBuf);
printf("%s\n","Please input data:");
gets(sendBuf);
//send(sockConn,sendBuf,strlen(sendBuf)+1,0);//把消息发送给客户端
sendto(sockConn,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrSrv,len);
//WSACleanup();
}
closesocket(sockConn);
}
java代码:
package com.c.client;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
public class CClient {
private Socket s = null;
private InputStream ins = null;
private OutputStream ous = null;
private BufferedReader br = null;
private byte[] buf = new byte[1024];
private String msg = null;
public void start() throws Exception {
s = new Socket("127.0.0.1", 6000);
ins = s.getInputStream();
ous = s.getOutputStream();
while (true) {
int i = 0, j = 0;
for (j = 0; (i = ins.read()) != -1; j++) {
if (i == '\0')
break;
buf[j] = (byte) i;
}
msg = new String(buf, 0, j);
if(msg.startsWith("quit")){
ous.write("quit\0".getBytes());
break;
}
System.out.println(msg);
br = new BufferedReader(new InputStreamReader(System.in));
ous.write((br.readLine() + '\0').getBytes());
}
br.close();
ous.close();
ins.close();
}
public static void main(String arg[]) {
try {
new CClient().start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
相关推荐
java和c++通信,支持多用户并发,采用java非阻塞式socket通信。
一个C++和JAVA分别作服务端和客户端的通信案例,比较特别,希望能有所帮助...没分了,多要点,呵呵
java与c++通过socket通信。其中java作为客户端,c++作为服务器。主要解决了C++中的结构体在java中如何实现和模拟。还有int,float,及字符串的处理。极具代表性。
java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket
Java客户端,c++服务端通过socket进行网络通信,传输数据
本次项目由于服务器之间需要通信加密,java和c++,自己只懂java,因此和同事(c)在网上找了好几个都测试不行,我们修改了其中一个,已通过测试,上传的是最基础的,需要复杂化的可自行修改。为了以后方便他人,贡献...
解决Java 和 C++ 程序之间通讯的方法(有图例,含源码)
服务端C++程序,客户端java程序,发送报文格式:结构体报头+数据负载,客户端发送和接收时需要做字节序的转换。 Ecplise+jdk1.6 运行成功
对学习C++的有用可以做为参考示例为源代码
利用JNI技术实现Java中调用C++编写的函数库示例程序源码,并附上参考JNI文档。 详情见本人博客:Java学习之通过JNI调用C/C++编写的dll链接库(图文教程)(http://write.blog.csdn.net/postlist)
JNI的小例子 实现java与C++的方法互调 简单易懂 添加注释
C++代码转java工具 C++代码转java工具 C++代码转java工具
java和c++通讯的小程序,java为客户端,用MyEclipse 5.0写的,c++为服务端,用MinGW写的。
C++Socket网络通信程序,完整程序设计文件,推荐
Demo使用java语言与c++语言通信············································
创建网络通信客户端程序 小例子,C++.net源代码编写
模拟实现android的binder机制在java层、c++层的模型最小例子。实现在不同进程中的通信。
NULL 博文链接:https://xblia.iteye.com/blog/1733625
Visual C++网络通信编程实用案例精选.part1.rar http://download.csdn.net/source/647223 Visual C++网络通信编程实用案例精选.part2.rar http://download.csdn.net/source/657097 Visual C++网络通信编程实用案例...
详细讲解Java与c++的区别,方便Java程序员快速理解上手c++,值得关注--从java到c++,适合java程序员快速学习c++