
1.
服务器端的代码:void SocketServer::CreateConnect(){std::cout<<"start Create Socket!"<<std::endl m_nSocket = -1 struct sockaddr_in server_addr struct sockaddr_in client_addr int portnumber=4321 if((m_nSocket=socket(AF_INET,SOCK_STREAM,0))==-1){std::cout<<"socket Create Failed!"<<strerror(errno)<<std::endl return }std::cout<<"Create Socket Finish!"<<std::endl/* 服务器端填充 sockaddr结构 */bzero(&server_addr,sizeof(struct sockaddr_in)) server_addr.sin_family=AF_INET server_addr.sin_addr.s_addr=inet_addr("127.0.0.1") server_addr.sin_port=htons(portnumber) /* 捆绑sockfd描述符 */if(bind(m_nSocket,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1){std::cout<<"Server Bind Failed!"<<strerror(errno)<<std::endl return }std::cout<<"bind Socket Finish!"<<std::endl /* 监听sockfd描述符 */if(listen(m_nSocket,5)==-1){std::cout<<"Listen Failed!"<<strerror(errno)<<std::endl return }std::cout<<"listen Socket Finish!"<<std::endl while(1){/* 服务器阻塞,直到客户程序建立连接 */std::cout<<"listen start..."<<std::endl int nNewFd=-1 size_t nSize = sizeof(struct sockaddr_in) if((nNewFd=accept(m_nSocket,(struct sockaddr *)(&client_addr),&(nSize))) == -1){std::cout<<"accept Failed!"<<strerror(errno)<<std::endl return }std::cout<<"server Get Connect from:"<<inet_ntoa(client_addr.sin_addr)<<std::endl while(1){char buf[256] = "0" size_t len = recv( nNewFd, buf, 256, 0)if ( len >0)std::cout<<"接受的消息为:"<<buf<<std::endl else {if ( len <0)std::cout<<"错误为:"<<strerror( errno)<<std::endl elsestd::cout<<"
客户端断开:"<<std::endl break }}/* 这个通讯已经结束 *///close(nNewFd) /* 循环下一个 */}}2.客户端代码://创建链接void SocketClient::CreateConnect(){char buffer[1024] struct sockaddr_in server_addr std::cout<<"socket create start!"<<std::endl /* 客户程序开始建立 sockfd描述符 */if((m_nSocket=socket(AF_INET,SOCK_STREAM,0))==-1){std::cout<<"Client socket Create Failed!!"<<strerror(errno)<<std::endl return }std::cout<<"socket create finshed!"<<std::endl /* 客户程序填充服务端的资料 */int portnumber = 4321 bzero(&server_addr,sizeof(server_addr)) server_addr.sin_family=AF_INET server_addr.sin_port=htons(portnumber) server_addr.sin_addr.s_addr=inet_addr("127.0.0.1") /* 客户程序发起连接请求 */if(connect(m_nSocket,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1){std::cout<<"Client connect Fialed!"<<strerror(errno)<<std::endl return }std::cout<<"connect finshed!"<<std::endl std::string str="start..." while(!str.empty()){std::cout<<"starting....!"<<std::endl std::cin>>str size_t len = send ( m_nSocket, str.c_str(), str.length(), 0)if ( len <0){std::cout<<"消息发送失败"<<str<<strerror (errno)<<std::endl }else{std::cout<<"消息发送成功"<<str<<std::endl }}close(m_nSocket)}3.编译完成后,启动服务器端代码和客户端代码就可以进行通信了。4.普及一下TCP/IP协议的部分知识,TCP是面向链接的协议,即在进行通信前服务器是被动链接,客户端是主动链接,那么客户端与服务器端的连接需要经过三次握手才能建立链接。在整个通信过程中客户端与服务器端的进行的通信都有确认机制,保证包能顺利的到达对方,但这也不是100%,中间的路由等中间桥出现问题,也有可能造成数据包的丢失,而任何一方没有收到确认包,都会一直处于等待和重传的过程中...服务器:创建socket->bind->listen->recv(send)->close客户端:创建socket->connect->recv(send)->close# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <unistd.h>
int main(int argc,char * argv[])
{
void *source,*target,*command
if (argc<3)
{
printf("使用方法:\n./my_cp 【源文件】 【目的地】\n")
exit(-1)
}
source = malloc(1024)
target = malloc(1024)
command = malloc(2060)
source = (void *) argv[1]
target = (void *) argv[2]
strcpy(command,"cp ")
strcpy(command,source)
strcpy(command," ")
strcpy(command,target)
system(command)
return 0
}
第一题
写个web 程序 这个题对性能有要求 所以肯定要用缓存 这些数据都是不变的
至于实现缓存的方法 如果用了hibernate 就直接对表设置缓存 如果没有 就在查询的方法里做些手脚
先查看缓存(比如xml)如果没有 就去查 然后 生成缓存 如果有 就直接在缓存中查找
第二题
写个线程 做个定时任务 用TimerTask 就搞定了
假如不用Java实现,仅仅使用Shell和AWK,该如何实现
linux crontab 就能实现
第三题:数据库基础
存到数据库 汗 本来就应该在数据库!@##%¥#¥%#%¥
至于优化 sql 级别的优化 是有限的 可以给时间字段加上索引 优化表空间 增大数据库缓存
评论列表(0条)