客户端 :
/*
client.c
向服务器发送接收数据包
*/
#include <stdio.h>
#include <Winsock2.h>
#include<iostream>
#include <memory.h>
#pragma comment(lib, "ws2_32.lib")
using namespace std;
void main()
{
WORD wVersionRequested;
WSADATA wsaData; //WSAata用来存储系统传回的关于WinSocket的资料。
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 ){
WSACleanup( );
return;
}
SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);// AF_INET ..tcp连接
//初始化连接与端口号
SOCKADDR_IN addrSrv;
//定义服务器地址端口
char* ip = "192.168.202.128";
u_short portNumber = 6000;
addrSrv.sin_addr.S_un.S_addr = inet_addr(ip);//本机地址,服务器在本机开启
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(portNumber);// 设置端口号
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//连接服务器
char recvBuf[50];
//必须要将非char类型指针转化为char*指针
int b = 1;
char* cb = (char*)&b;
char *a = "123";
char str[1024];
//copy内存
memcpy(str,cb,sizeof(b));
memcpy(str+sizeof(b),a,strlen(a)+1);
cout<<str<<endl;
send(sockClient,str,sizeof(str),0);
//发送数据到服务器端
//send(sockClient,cp,sizeof(a),0);
//从服务器接收数据
//recv(sockClient,recvBuf,10,0);//接受数据
//printf("%s\n",recvBuf);
closesocket(sockClient);//关闭连接
WSACleanup();
}
server.c
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <memory.h>
int main(int argc, char *argv[])
{
int sockfd,new_fd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int sin_size,portnumber;
char hello[]="Hello LR\n";
int n;
char rbuf[1024];
if(argc!=2)
{
fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);
exit(1);
}
if((portnumber=atoi(argv[1]))<0)
{
fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);
exit(1);
}
/* 服务器端开始建立socket描述符 */
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
fprintf(stderr,"Socket error:%s\n\a",strerror(errno));
exit(1);
}
/* 服务器端填充 sockaddr结构 */
bzero(&server_addr,sizeof(struct sockaddr_in));
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
server_addr.sin_port=htons(portnumber);
/* 捆绑sockfd描述符 */
if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
{
fprintf(stderr,"Bind error:%s\n\a",strerror(errno));
exit(1);
}
/* 监听sockfd描述符 */
if(listen(sockfd,1)==-1)
{
fprintf(stderr,"Listen error:%s\n\a",strerror(errno));
exit(1);
}
while(1)
{
/* 服务器阻塞,直到客户程序建立连接 */
sin_size=sizeof(struct sockaddr_in);
if((new_fd=accept(sockfd,(struct sockaddr *)NULL,NULL))==-1)
{
fprintf(stderr,"Accept error:%s\n\a",strerror(errno));
exit(1);
}
fprintf(stderr,"Server get connection from %s\n",inet_ntoa(client_addr.sin_addr));
n = recv(new_fd,rbuf,sizeof(rbuf),0);
if(n>0){
// 解客户端的消息
int a;
char c[1024];
memcpy(&a,rbuf,4);
memcpy(c,rbuf+4,6);
printf("recv msg:%d\n",a);
printf("recv msg:%s\n",c);
}
/* 这个通讯已经结束 */
close(new_fd);
/* 循环下一个 */
}
close(sockfd);
exit(0);
}